<uses-permission android:name="${applicationId}.START_STOP_TASKBAR" />
<uses-permission android:name="${applicationId}.SEND_RECEIVE_SETTINGS" />
+ <uses-permission-sdk-23 android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />
+
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
+ <activity
+ android:name=".activity.ShortcutActivity"
+ android:label="@string/pref_header_freeform"
+ android:documentLaunchMode="always"
+ android:excludeFromRecents="true"
+ android:enabled="false"
+ android:theme="@android:style/Theme.NoDisplay" >
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.CREATE_SHORTCUT" />
+
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ </activity>
<service android:name=".service.TaskbarService"/>
<service android:name=".service.StartMenuService"/>
import com.farmerbb.taskbar.activity.ImportSettingsActivity;
import com.farmerbb.taskbar.activity.InvisibleActivityFreeform;
import com.farmerbb.taskbar.activity.KeyboardShortcutActivity;
+import com.farmerbb.taskbar.activity.ShortcutActivity;
import com.farmerbb.taskbar.fragment.AboutFragment;
import com.farmerbb.taskbar.fragment.AdvancedFragment;
import com.farmerbb.taskbar.fragment.FreeformModeFragment;
pref.getBoolean("keyboard_shortcut", false) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
+ ComponentName component3 = new ComponentName(BuildConfig.APPLICATION_ID, ShortcutActivity.class.getName());
+ getPackageManager().setComponentEnabledSetting(component3,
+ pref.getBoolean("freeform_hack", false) ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+
if(BuildConfig.APPLICATION_ID.equals(BuildConfig.BASE_APPLICATION_ID))
proceedWithAppLaunch(savedInstanceState);
else {
--- /dev/null
+/* Copyright 2016 Braden Farmer
+ *
+ * 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.farmerbb.taskbar.activity;
+
+import android.annotation.TargetApi;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.provider.Settings;
+
+import com.farmerbb.taskbar.util.U;
+
+public class ShortcutActivity extends Activity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ if(getIntent().hasExtra("is_launching_shortcut")) {
+ SharedPreferences pref = U.getSharedPreferences(this);
+ if(pref.getBoolean("freeform_hack", false) && hasFreeformSupport()) {
+ sendBroadcast(new Intent("com.farmerbb.taskbar.START"));
+
+ new Handler().postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ U.startFreeformHack(ShortcutActivity.this, false);
+ }
+ }, 100);
+ }
+ } else setResult(RESULT_OK, U.getShortcutIntent(this));
+
+ finish();
+ }
+
+ @TargetApi(Build.VERSION_CODES.N)
+ private boolean hasFreeformSupport() {
+ return getPackageManager().hasSystemFeature(PackageManager.FEATURE_FREEFORM_WINDOW_MANAGEMENT)
+ || Settings.Global.getInt(getContentResolver(), "enable_freeform_support", -1) == 1
+ || Settings.Global.getInt(getContentResolver(), "force_resizable_activities", -1) == 1;
+ }
+}
\ No newline at end of file
package com.farmerbb.taskbar.fragment;
+import android.content.ComponentName;
import android.content.SharedPreferences;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
+import com.farmerbb.taskbar.BuildConfig;
import com.farmerbb.taskbar.R;
+import com.farmerbb.taskbar.activity.KeyboardShortcutActivity;
+import com.farmerbb.taskbar.activity.ShortcutActivity;
import com.farmerbb.taskbar.util.U;
public class FreeformModeFragment extends SettingsFragment {
findPreference("freeform_hack").setOnPreferenceClickListener(this);
findPreference("freeform_mode_help").setOnPreferenceClickListener(this);
+ findPreference("add_shortcut").setOnPreferenceClickListener(this);
bindPreferenceSummaryToValue(findPreference("window_size"));
findPreference("open_in_fullscreen").setEnabled(freeformHackEnabled);
findPreference("save_window_sizes").setEnabled(freeformHackEnabled);
findPreference("window_size").setEnabled(freeformHackEnabled);
+ findPreference("add_shortcut").setEnabled(freeformHackEnabled);
+
+ ComponentName component = new ComponentName(BuildConfig.APPLICATION_ID, ShortcutActivity.class.getName());
+ getActivity().getPackageManager().setComponentEnabledSetting(component,
+ freeformHackEnabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
AppCompatActivity activity = (AppCompatActivity) getActivity();
activity.setTitle(R.string.pref_header_freeform);
findPreference("open_in_fullscreen").setEnabled(hasFreeformSupport());
findPreference("save_window_sizes").setEnabled(hasFreeformSupport());
findPreference("window_size").setEnabled(hasFreeformSupport());
+ findPreference("add_shortcut").setEnabled(hasFreeformSupport());
+
+ ComponentName component = new ComponentName(BuildConfig.APPLICATION_ID, ShortcutActivity.class.getName());
+ getActivity().getPackageManager().setComponentEnabledSetting(component,
+ hasFreeformSupport() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
if(hasFreeformSupport()) {
U.showToastLong(getActivity(), R.string.reboot_required);
import com.farmerbb.taskbar.activity.KeyboardShortcutActivity;
import com.farmerbb.taskbar.activity.SelectAppActivity;
import com.farmerbb.taskbar.activity.SelectAppActivityDark;
+import com.farmerbb.taskbar.activity.ShortcutActivity;
import com.farmerbb.taskbar.service.NotificationService;
import com.farmerbb.taskbar.service.StartMenuService;
import com.farmerbb.taskbar.service.TaskbarService;
findPreference("open_in_fullscreen").setEnabled(((CheckBoxPreference) p).isChecked());
findPreference("save_window_sizes").setEnabled(((CheckBoxPreference) p).isChecked());
findPreference("window_size").setEnabled(((CheckBoxPreference) p).isChecked());
+ findPreference("add_shortcut").setEnabled(((CheckBoxPreference) p).isChecked());
+
+ ComponentName component2 = new ComponentName(BuildConfig.APPLICATION_ID, ShortcutActivity.class.getName());
+ getActivity().getPackageManager().setComponentEnabledSetting(component2,
+ ((CheckBoxPreference) p).isChecked() ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+
break;
case "freeform_mode_help":
AlertDialog.Builder builder2 = new AlertDialog.Builder(getActivity());
startActivityForResult(intent2, 123);
break;
+ case "add_shortcut":
+ Intent intent3 = U.getShortcutIntent(getActivity());
+ intent3.setAction("com.android.launcher.action.INSTALL_SHORTCUT");
+ intent3.putExtra("duplicate", false);
+
+ getActivity().sendBroadcast(intent3);
+
+ U.showToast(getActivity(), R.string.shortcut_created);
+ break;
}
return true;
import android.content.pm.ResolveInfo;
import android.content.res.Configuration;
import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
import android.hardware.display.DisplayManager;
import android.net.Uri;
import android.os.Build;
import com.farmerbb.taskbar.R;
import com.farmerbb.taskbar.activity.DummyActivity;
import com.farmerbb.taskbar.activity.InvisibleActivityFreeform;
+import com.farmerbb.taskbar.activity.ShortcutActivity;
import com.farmerbb.taskbar.receiver.LockDeviceReceiver;
import java.util.ArrayList;
@SuppressWarnings("deprecation")
@TargetApi(Build.VERSION_CODES.N)
- private static void startFreeformHack(Context context, boolean launchedFromTaskbar) {
+ public static void startFreeformHack(Context context, boolean launchedFromTaskbar) {
Intent freeformHackIntent = new Intent(context, InvisibleActivityFreeform.class);
freeformHackIntent.putExtra("check_multiwindow", true);
freeformHackIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT);
pba.addBlockedApp(context, entry);
}
}
+
+ public static Intent getShortcutIntent(Context context) {
+ Intent shortcutIntent = new Intent(context, ShortcutActivity.class);
+ shortcutIntent.setAction(Intent.ACTION_MAIN);
+ shortcutIntent.putExtra("is_launching_shortcut", true);
+
+ BitmapDrawable drawable = (BitmapDrawable) context.getDrawable(R.mipmap.ic_freeform_mode);
+
+ Intent intent = new Intent();
+ intent.putExtra(Intent.EXTRA_SHORTCUT_INTENT, shortcutIntent);
+ if(drawable != null) intent.putExtra(Intent.EXTRA_SHORTCUT_ICON, drawable.getBitmap());
+ intent.putExtra(Intent.EXTRA_SHORTCUT_NAME, context.getString(R.string.pref_header_freeform));
+
+ return intent;
+ }
}
<string name="pref_title_save_window_sizes">Save window sizes for apps</string>
<string name="pref_description_save_window_sizes">When opening new windows from the context menu</string>
+ <string name="add_shortcut">Add shortcut to home screen</string>
+ <string name="shortcut_created">Freeform mode shortcut created</string>
+
</resources>
<string name="pref_title_save_window_sizes">Save window sizes for apps</string>
<string name="pref_description_save_window_sizes">When opening new windows from the context menu</string>
+ <string name="add_shortcut">Add shortcut to home screen</string>
+ <string name="shortcut_created">Freeform mode shortcut created</string>
+
</resources>
android:title="@string/pref_title_window_size"/>
<Preference
+ android:key="add_shortcut"
+ android:title="@string/add_shortcut" />
+
+ <Preference
android:key="freeform_mode_help"
android:title="@string/pref_title_freeform_mode_help" />