AccessibilityWidgetProviderAssistiveLight.java

/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settings.accessibilitywidget;


import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler;
import android.provider.Settings;
import android.util.secutil.Log;
import android.view.View;
import android.widget.RemoteViews;

import com.android.settings.R;
import com.sec.android.app.GlobalConfig;
import com.sec.android.hardware.SecHardwareInterface;

//WTL_SIDI_EDM_START
//import android.app.enterprise.IRestrictionPolicy;
//WTL_SIDI_EDM_END

public class AccessibilityWidgetProviderAssistiveLight extends AppWidgetProvider {
    static final String TAG = "AccessibilityWidgetProviderAssistiveLight";

    static final ComponentName THIS_APPWIDGET = new ComponentName("com.android.settings",
            "com.android.settings.accessibilitywidget.AccessibilityWidgetProviderAssistiveLight");

    private static final int BUTTON_CENTER = 1;
    private static SettingsObserver sSettingsObserver;

    private Notification mAssistiveNotification;

    @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
         Log.secD(TAG, "onUpdate, appWidgetIds.length : " + appWidgetIds.length );
        // Update each requested appWidgetId
        RemoteViews view = buildUpdate(context);
        for (int i = 0; i < appWidgetIds.length; i++) {
            appWidgetManager.updateAppWidget(appWidgetIds[i], view);
        }
    }

    @Override
    public void onEnabled(Context context) {
        checkObserver(context);
    }

    @Override
    public void onDisabled(Context context) {
        if (sSettingsObserver != null) {
            sSettingsObserver.stopObserving();
            sSettingsObserver = null;
        }
    }

    @Override
    public void onDeleted(Context context, int[] appWidgetIds) {
        if (getWidgetMode(context)) {
            Settings.System.putInt(context.getContentResolver(), Settings.System.TORCH_LIGHT, 0);
            try {
                SecHardwareInterface.setTorchLight(0);
               
                NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.cancel(R.drawable.stat_notify_assistivelight);
            } catch (Exception e) {
                Log.secE(TAG, "could not turn off torch light", e);
            }
        }
    }
   
    /**
     * Load image for given widget and build {@link RemoteViews} for it.
     */
    static RemoteViews buildUpdate(Context context) {
        RemoteViews views = new RemoteViews(context.getPackageName(),
                R.layout.accessibility_widget);
        views.setOnClickPendingIntent(R.id.center_button,
                getLaunchPendingIntent(context, BUTTON_CENTER));

        updateButtons(views, context);
        return views;
    }

    /**
     * Updates the widget when something changes, or when a button is pushed.
     *
     * @param context
     */
    public static void updateWidget(Context context) {
        RemoteViews views = buildUpdate(context);
        // Update specific list of appWidgetIds if given, otherwise default to
        // all
        final AppWidgetManager gm = AppWidgetManager.getInstance(context);
         Log.secD(TAG, "updateWidget : " + THIS_APPWIDGET );
        gm.updateAppWidget(THIS_APPWIDGET, views);
        checkObserver(context);
    }

    /**
     * Updates the buttons based on the underlying states of wifi, etc.
     *
     * @param views The RemoteViews to update.
     * @param context
     */
    private static void updateButtons(RemoteViews views, Context context) {
        views.setViewVisibility(R.id.center_button, View.VISIBLE);
        views.setTextViewText(R.id.center_text, context.getString(R.string.accessibility_widget_assistive_light));
       
        if (getWidgetMode(context)) {
         views.setImageViewResource(R.id.center_icon, R.drawable.accessibility_ic_light_press);
         views.setImageViewResource(R.id.bottom_icon, R.drawable.accessibility_bar_press);
          Log.secD(TAG, "updateButtons , icon_on");
        }
        else {
         views.setImageViewResource(R.id.center_icon, R.drawable.accessibility_ic_light_nor);
         views.setImageViewResource(R.id.bottom_icon, R.drawable.accessibility_bar_nor);
          Log.secD(TAG, "updateButtons , icon_off");
        }
       
        /*if (!GlobalConfig.GLOBALCONFIG_SETTINGS_SUPPORT_FLASH ) {
            views.setViewVisibility(R.id.main,View.GONE);
        } */

       
    }

    /**
     * Creates PendingIntent to notify the widget of a button click.
     *
     * @param context
     * @param appWidgetId
     * @return
     */
    private static PendingIntent getLaunchPendingIntent(Context context,
            int buttonId) {
        Intent launchIntent = new Intent();
        launchIntent.setClass(context, AccessibilityWidgetProviderAssistiveLight.class);
        launchIntent.addCategory(Intent.CATEGORY_ALTERNATIVE);
        launchIntent.setData(Uri.parse("custom:" + buttonId));
        PendingIntent pi = PendingIntent.getBroadcast(context, 0 /*
                                                                  * no
                                                                  * requestCode
                                                                  */, launchIntent, 0 /*
                                                                                       * no
                                                                                       * flags
                                                                                       */);
        return pi;
    }

    /**
     * Receives and processes a button pressed intent or state change.
     *
     * @param context
     * @param intent Indicates the pressed button.
     */
    @Override
    public void onReceive(Context context, Intent intent) {
        super.onReceive(context, intent);
       
        if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
            Uri data = intent.getData();
            int buttonId = Integer.parseInt(data.getSchemeSpecificPart());
            if (buttonId == BUTTON_CENTER) {
              Log.secD(TAG, "BUTTON_CENTER : ");
                toggleWidgetMode(context);
            }
        }
        else {
            if (intent.getAction().equals(Intent.ACTION_LOCALE_CHANGED)) {
                if (getWidgetMode(context)) {
                    NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
                    notificationManager.cancel(R.drawable.stat_notify_assistivelight);

                    if(mAssistiveNotification == null) {
                        mAssistiveNotification = new Notification();
                        mAssistiveNotification.icon = R.drawable.stat_notify_assistivelight;
                        mAssistiveNotification.when = 0;
                        mAssistiveNotification.flags = Notification.FLAG_ONGOING_EVENT;
                        mAssistiveNotification.tickerText = context.getString(R.string.torch_light_notification_title);
                    }

                    Intent mIntent = new Intent("android.intent.action.ACTION_ASSISTIVE_OFF");
                    PendingIntent pi = PendingIntent.getBroadcast(context, 0, mIntent, 0);
                    mAssistiveNotification.setLatestEventInfo(context, context.getString(R.string.torch_light_notification_title),
                            context.getString(R.string.torch_light_notification_message), pi);
                    notificationManager.notify(mAssistiveNotification.icon, mAssistiveNotification);
                }
            }

            // Don't fall-through to updating the widget. The Intent
            // was something unrelated or that our super class took
            // care of.
            return;
        }
        // State changes fall through
        updateWidget(context);
    }

    private void toggleWidgetMode(Context context) {
        if (!getWidgetMode(context)) {
            Settings.System.putInt(context.getContentResolver(), Settings.System.TORCH_LIGHT, 1);
            try {
                SecHardwareInterface.setTorchLight(1);
            } catch (Exception e) {
                Log.secE(TAG, "could not turn off torch light", e);
            }

            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);

            if(mAssistiveNotification == null) {
                mAssistiveNotification = new Notification();
                mAssistiveNotification.icon = R.drawable.stat_notify_assistivelight;
                mAssistiveNotification.when = 0;
                mAssistiveNotification.flags = Notification.FLAG_ONGOING_EVENT;
                mAssistiveNotification.tickerText = context.getString(R.string.torch_light_notification_title);
            }

            Intent mIntent = new Intent("android.intent.action.ACTION_ASSISTIVE_OFF");
            PendingIntent pi = PendingIntent.getBroadcast(context, 0, mIntent, 0);
            mAssistiveNotification.setLatestEventInfo(context, context.getString(R.string.torch_light_notification_title),
                    context.getString(R.string.torch_light_notification_message), pi);
            notificationManager.notify(mAssistiveNotification.icon, mAssistiveNotification);
        } else {
            Settings.System.putInt(context.getContentResolver(), Settings.System.TORCH_LIGHT, 0);
            try {
                SecHardwareInterface.setTorchLight(0);
            } catch (Exception e) {
                Log.secE(TAG, "could not turn off torch light", e);
            }

            NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
            notificationManager.cancel(R.drawable.stat_notify_assistivelight);
        }
         Log.secD(TAG, "toggleWidgetMode : " + getWidgetMode(context));
  
 }

 private static boolean getWidgetMode(Context context) {
  
  boolean result =(Settings.System.getInt(context.getContentResolver(),
    Settings.System.TORCH_LIGHT, 0) != 0);
   Log.secD(TAG, "getWidgetMode : " + result);
       
        return result;
    }  
 
    private static void checkObserver(Context context) {
        if (sSettingsObserver == null) {
            sSettingsObserver = new SettingsObserver(new Handler(),
                    context.getApplicationContext());
            sSettingsObserver.startObserving();
        }
    }

    /** Observer to watch for changes to the MONO_AUDIO_KEY_CHECKBOX_DB */
    private static class SettingsObserver extends ContentObserver {

        private Context mContext;

        SettingsObserver(Handler handler, Context context) {
            super(handler);
            mContext = context;
        }

        void startObserving() {
            ContentResolver resolver = mContext.getContentResolver();
            resolver.registerContentObserver(Settings.System
                    .getUriFor(Settings.System.TORCH_LIGHT), false, this);
        }

        void stopObserving() {
            mContext.getContentResolver().unregisterContentObserver(this);
        }

        @Override
        public void onChange(boolean selfChange) {
            updateWidget(mContext);
        }
    }
   
  
   
}

内容概要:本文档是一份关于大数据开发的笔试题目集合,涵盖了多个计算机科学领域的知识点。主要内容包括:数组排序算法的应用,如给出了一段不完整的冒泡排序代码示例;二叉树的基本操作,包括普通二叉树的遍历方式(先序遍历),以及针对大规模数据(如一亿个节点)时避免服务器崩溃的优化策略——采用分布式计算思想将单棵大树拆分为多棵小树并行处理;人力资源系统的数据库设计方案,涉及到了员工信息存储所需的字段(如ID、姓名、工资、上级ID、层级)、展示公司内部架构的SQL语句(利用CTE公共表达式或者PL/SQL中的特定语法来构建递归查询),还有统计某个管理者所辖人数的方法论。 适合人群:正在准备大数据相关岗位面试的技术人员,尤其是那些希望加深对数据结构、算法以及数据库设计等方面理解的人群。 使用场景及目标:①帮助求职者熟悉常见的编程技巧与理论知识,提高解决实际问题的能力;②为从事企业级应用开发工作的程序员提供参考案例,以便更好地理解和实施复杂的数据管理和业务逻辑建模任务。 阅读建议:由于文档中包含了多种类型的题目,建议读者按照自己的薄弱环节选择重点复习的内容。对于排序算法部分,应该注意理解各种经典算法的工作机制及其优缺点;对于二叉树的问题,则要掌握不同遍历顺序的特点,并思考如何应对海量数据带来的挑战;最后,在研究HR系统相关的数据库设计时,除了要学会正确地创建表格外,还应学会运用适当的SQL语句来进行高效的数据检索和分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值