导航菜单

页面标题

页面副标题

xDrip+ v04633772025.07.16 - WidgetUpdateService.java 源代码

正在查看: xDrip+ v04633772025.07.16 应用的 WidgetUpdateService.java JAVA 源代码文件

本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。


package com.eveningoutpost.dexdrip;

import android.app.Service;
import android.appwidget.AppWidgetManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.os.PowerManager;
import com.eveningoutpost.dexdrip.models.JoH;
import com.eveningoutpost.dexdrip.models.UserError;

public class WidgetUpdateService extends Service {
    private boolean isRegistered = false;
    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            PowerManager.WakeLock wakeLock = JoH.getWakeLock("xdrip-widget-bcast", 20000);
            if (intent.getAction().compareTo("android.intent.action.TIME_TICK") == 0) {
                WidgetUpdateService.this.updateCurrentBgInfo();
            } else if (intent.getAction().compareTo("android.intent.action.SCREEN_ON") == 0) {
                WidgetUpdateService.this.enableClockTicks();
                WidgetUpdateService.this.updateCurrentBgInfo();
            } else if (intent.getAction().compareTo("android.intent.action.SCREEN_OFF") == 0) {
                WidgetUpdateService.this.disableClockTicks();
            }
            JoH.releaseWakeLock(wakeLock);
        }
    };

    public static void staticRefreshWidgets() {
        try {
            Context appContext = xdrip.getAppContext();
            if (AppWidgetManager.getInstance(appContext).getAppWidgetIds(new ComponentName(appContext, (Class<?>) xDripWidget.class)).length > 0) {
                appContext.startService(new Intent(appContext, (Class<?>) WidgetUpdateService.class));
            }
        } catch (Exception e) {
            UserError.Log.e("WidgetUpdateService", "Got exception in staticRefreshWidgets: " + e);
        }
    }

    @Override
    public IBinder onBind(Intent intent) {
        throw new UnsupportedOperationException("Not yet implemented");
    }

    @Override
    public void onCreate() {
        super.onCreate();
        PowerManager powerManager = (PowerManager) getSystemService("power");
        UserError.Log.d("WidgetUpdateService", "onCreate");
        if (powerManager.isInteractive()) {
            enableClockTicks();
        } else {
            disableClockTicks();
        }
    }

    public void enableClockTicks() {
        UserError.Log.d("WidgetUpdateService", "enableClockTicks");
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.TIME_TICK");
        intentFilter.addAction("android.intent.action.SCREEN_ON");
        intentFilter.addAction("android.intent.action.SCREEN_OFF");
        if (this.isRegistered) {
            unregisterReceiver(this.broadcastReceiver);
        }
        registerReceiver(this.broadcastReceiver, intentFilter);
        this.isRegistered = true;
    }

    public void disableClockTicks() {
        UserError.Log.d("WidgetUpdateService", "disableClockTicks");
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction("android.intent.action.SCREEN_ON");
        intentFilter.addAction("android.intent.action.SCREEN_OFF");
        if (this.isRegistered) {
            unregisterReceiver(this.broadcastReceiver);
        }
        registerReceiver(this.broadcastReceiver, intentFilter);
        this.isRegistered = true;
    }

    @Override
    public int onStartCommand(Intent intent, int i, int i2) {
        updateCurrentBgInfo();
        return 1;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        BroadcastReceiver broadcastReceiver = this.broadcastReceiver;
        if (broadcastReceiver != null) {
            unregisterReceiver(broadcastReceiver);
            this.isRegistered = false;
        }
    }

    public void updateCurrentBgInfo() {
        UserError.Log.d("WidgetUpdateService", "Sending update flag to widget");
        int[] appWidgetIds = AppWidgetManager.getInstance(getApplication()).getAppWidgetIds(new ComponentName(getApplication(), (Class<?>) xDripWidget.class));
        UserError.Log.d("WidgetUpdateService", "Updating " + appWidgetIds.length + " widgets");
        Intent intent = new Intent(this, (Class<?>) xDripWidget.class);
        intent.setAction("android.appwidget.action.APPWIDGET_UPDATE");
        intent.putExtra("appWidgetIds", appWidgetIds);
        sendBroadcast(intent);
    }
}