OSDN Git Service

Taskbar 3.0.3
[android-x86/packages-apps-Taskbar.git] / app / src / main / java / com / farmerbb / taskbar / activity / DashboardActivity.java
1 /* Based on code by Leonardo Fischer
2  * See https://github.com/lgfischer/WidgetHostExample
3  *
4  * Copyright 2016 Braden Farmer
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 package com.farmerbb.taskbar.activity;
20
21 import android.app.Activity;
22 import android.app.AlertDialog;
23 import android.appwidget.AppWidgetHost;
24 import android.appwidget.AppWidgetManager;
25 import android.appwidget.AppWidgetProviderInfo;
26 import android.content.ActivityNotFoundException;
27 import android.content.BroadcastReceiver;
28 import android.content.Context;
29 import android.content.Intent;
30 import android.content.IntentFilter;
31 import android.hardware.display.DisplayManager;
32 import android.os.Bundle;
33 import android.support.v4.content.LocalBroadcastManager;
34 import android.view.Display;
35 import android.view.KeyEvent;
36 import android.view.MotionEvent;
37 import android.view.WindowManager;
38 import android.widget.FrameLayout;
39 import android.widget.LinearLayout;
40
41 import com.farmerbb.taskbar.R;
42 import com.farmerbb.taskbar.util.U;
43
44 public class DashboardActivity extends Activity {
45
46     private AppWidgetManager mAppWidgetManager;
47     private AppWidgetHost mAppWidgetHost;
48
49     private final int REQUEST_PICK_APPWIDGET = 456;
50     private final int REQUEST_CREATE_APPWIDGET = 789;
51
52     private boolean shouldFinish = true;
53     private int cellId = -1;
54
55     private BroadcastReceiver addWidgetReceiver = new BroadcastReceiver() {
56         @Override
57         public void onReceive(Context context, Intent intent) {
58             mAppWidgetManager = AppWidgetManager.getInstance(context);
59             mAppWidgetHost = new AppWidgetHost(context, intent.getIntExtra("appWidgetId", -1));
60             cellId = intent.getIntExtra("cellId", -1);
61
62             int appWidgetId = mAppWidgetHost.allocateAppWidgetId();
63             Intent pickIntent = new Intent(AppWidgetManager.ACTION_APPWIDGET_PICK);
64             pickIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
65
66             try {
67                 startActivityForResult(pickIntent, REQUEST_PICK_APPWIDGET);
68             } catch (ActivityNotFoundException e) {
69                 U.showToast(DashboardActivity.this, R.string.lock_device_not_supported);
70                 finish();
71             }
72
73             shouldFinish = false;
74         }
75     };
76
77     private BroadcastReceiver removeWidgetReceiver = new BroadcastReceiver() {
78         @Override
79         public void onReceive(final Context context, Intent intent) {
80             cellId = intent.getIntExtra("cellId", -1);
81
82             AlertDialog.Builder builder = new AlertDialog.Builder(DashboardActivity.this);
83             builder.setTitle(R.string.remove_widget)
84                     .setMessage(R.string.are_you_sure)
85                     .setNegativeButton(R.string.action_cancel, (dialog, which) -> {
86                         LocalBroadcastManager.getInstance(DashboardActivity.this).sendBroadcast(new Intent("com.farmerbb.taskbar.REMOVE_WIDGET_COMPLETED"));
87
88                         shouldFinish = true;
89                     })
90                     .setPositiveButton(R.string.action_ok, (dialog, which) -> {
91                         Intent intent1 = new Intent("com.farmerbb.taskbar.REMOVE_WIDGET_COMPLETED");
92                         intent1.putExtra("cellId", cellId);
93                         LocalBroadcastManager.getInstance(DashboardActivity.this).sendBroadcast(intent1);
94
95                         shouldFinish = true;
96                     });
97
98             AlertDialog dialog = builder.create();
99             dialog.show();
100             dialog.setCancelable(false);
101
102             shouldFinish = false;
103         }
104     };
105
106     private BroadcastReceiver finishReceiver = new BroadcastReceiver() {
107         @Override
108         public void onReceive(Context context, Intent intent) {
109             finish();
110         }
111     };
112
113     @SuppressWarnings("deprecation")
114     @Override
115     protected void onCreate(Bundle savedInstanceState) {
116         super.onCreate(savedInstanceState);
117
118         // Detect outside touches, and finish the activity when one is detected
119         getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
120         getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
121
122         DisplayManager dm = (DisplayManager) getSystemService(DISPLAY_SERVICE);
123         Display display = dm.getDisplay(Display.DEFAULT_DISPLAY);
124
125         setContentView(R.layout.incognito);
126
127         LinearLayout layout = (LinearLayout) findViewById(R.id.incognitoLayout);
128         layout.setLayoutParams(new FrameLayout.LayoutParams(display.getWidth(), display.getHeight()));
129
130         LocalBroadcastManager.getInstance(this).registerReceiver(addWidgetReceiver, new IntentFilter("com.farmerbb.taskbar.ADD_WIDGET_REQUESTED"));
131         LocalBroadcastManager.getInstance(this).registerReceiver(removeWidgetReceiver, new IntentFilter("com.farmerbb.taskbar.REMOVE_WIDGET_REQUESTED"));
132         LocalBroadcastManager.getInstance(this).registerReceiver(finishReceiver, new IntentFilter("com.farmerbb.taskbar.DASHBOARD_DISAPPEARING"));
133     }
134
135     @Override
136     public boolean onTouchEvent(MotionEvent event) {
137         if(event.getAction() == MotionEvent.ACTION_DOWN || event.getAction() == MotionEvent.ACTION_OUTSIDE) onBackPressed();
138         return super.onTouchEvent(event);
139     }
140
141     @Override
142     public void onBackPressed() {
143         LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.HIDE_DASHBOARD"));
144     }
145
146     @Override
147     public boolean dispatchKeyShortcutEvent(KeyEvent event) {
148         if(event.getAction() == KeyEvent.ACTION_DOWN) {
149             event.getKeyCode();
150
151             return true;
152         }
153         return super.dispatchKeyShortcutEvent(event);
154     }
155
156     @Override
157     protected void onPause() {
158         super.onPause();
159
160         if(shouldFinish)
161             onBackPressed();
162     }
163
164     @Override
165     protected void onDestroy() {
166         super.onDestroy();
167
168         LocalBroadcastManager.getInstance(this).unregisterReceiver(addWidgetReceiver);
169         LocalBroadcastManager.getInstance(this).unregisterReceiver(removeWidgetReceiver);
170         LocalBroadcastManager.getInstance(this).unregisterReceiver(finishReceiver);
171     }
172
173     @Override
174     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
175         if(resultCode == RESULT_OK) {
176             if(requestCode == REQUEST_PICK_APPWIDGET) {
177                 configureWidget(data);
178             } else if(requestCode == REQUEST_CREATE_APPWIDGET) {
179                 createWidget(data);
180             }
181         } else if(resultCode == RESULT_CANCELED && data != null) {
182             int appWidgetId = data.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
183             if(appWidgetId != -1) {
184                 mAppWidgetHost.deleteAppWidgetId(appWidgetId);
185             }
186
187             LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent("com.farmerbb.taskbar.ADD_WIDGET_COMPLETED"));
188
189             shouldFinish = true;
190         }
191     }
192
193     private void configureWidget(Intent data) {
194         Bundle extras = data.getExtras();
195         int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1);
196         AppWidgetProviderInfo appWidgetInfo = mAppWidgetManager.getAppWidgetInfo(appWidgetId);
197         if(appWidgetInfo.configure != null) {
198             Intent intent = new Intent(AppWidgetManager.ACTION_APPWIDGET_CONFIGURE);
199             intent.setComponent(appWidgetInfo.configure);
200             intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
201             startActivityForResult(intent, REQUEST_CREATE_APPWIDGET);
202
203             shouldFinish = false;
204         } else {
205             createWidget(data);
206         }
207     }
208
209     private void createWidget(Intent data) {
210         Intent intent = new Intent("com.farmerbb.taskbar.ADD_WIDGET_COMPLETED");
211         intent.putExtra("appWidgetId", data.getExtras().getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, -1));
212         intent.putExtra("cellId", cellId);
213         LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
214
215         shouldFinish = true;
216     }
217 }