From b6e4d5528b412a4aadd5ff164ab89f6e932adfa8 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 5 Nov 2016 21:29:59 -0700 Subject: [PATCH] Fix and enable launcher shortcuts on Android 7.1 --- app/src/main/AndroidManifest.xml | 9 ++ app/src/main/java/com/limelight/AppView.java | 35 +----- .../limelight/AppViewShortcutTrampoline.java | 119 ++++++++++++++++++ .../com/limelight/utils/ShortcutHelper.java | 9 +- app/src/main/res/mipmap-hdpi/ic_pc_scut.png | Bin 0 -> 2626 bytes app/src/main/res/mipmap-mdpi/ic_pc_scut.png | Bin 0 -> 1641 bytes app/src/main/res/mipmap-xhdpi/ic_pc_scut.png | Bin 0 -> 3757 bytes app/src/main/res/mipmap-xxhdpi/ic_pc_scut.png | Bin 0 -> 5998 bytes .../main/res/mipmap-xxxhdpi/ic_pc_scut.png | Bin 0 -> 8781 bytes 9 files changed, 135 insertions(+), 37 deletions(-) create mode 100644 app/src/main/java/com/limelight/AppViewShortcutTrampoline.java create mode 100644 app/src/main/res/mipmap-hdpi/ic_pc_scut.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_pc_scut.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_pc_scut.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_pc_scut.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_pc_scut.png diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9ba989ce..487c8d85 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -51,6 +51,15 @@ + + + + diff --git a/app/src/main/java/com/limelight/AppView.java b/app/src/main/java/com/limelight/AppView.java index a85c91fa..673d4a2e 100644 --- a/app/src/main/java/com/limelight/AppView.java +++ b/app/src/main/java/com/limelight/AppView.java @@ -49,12 +49,11 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { private ComputerDetails computer; private ComputerManagerService.ApplistPoller poller; - private SpinnerDialog blockingLoadSpinner, blockingServerinfoSpinner; + private SpinnerDialog blockingLoadSpinner; private String lastRawApplist; private int lastRunningAppId; private boolean suspendGridUpdates; private boolean inForeground; - private boolean launchedFromShortcut; private final static int START_OR_RESUME_ID = 1; private final static int QUIT_ID = 2; @@ -63,7 +62,6 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { public final static String NAME_EXTRA = "Name"; public final static String UUID_EXTRA = "UUID"; - public final static String SHORTCUT_EXTRA = "Shortcut"; private ComputerManagerService.ComputerManagerBinder managerBinder; private final ServiceConnection serviceConnection = new ServiceConnection() { @@ -183,30 +181,6 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { return; } - if (launchedFromShortcut) { - if (details.state == ComputerDetails.State.ONLINE) { - if (blockingServerinfoSpinner != null) { - blockingServerinfoSpinner.dismiss(); - blockingServerinfoSpinner = null; - } - - if (details.runningGameId != 0) { - AppView.this.runOnUiThread(new Runnable() { - @Override - public void run() { - // We have to finish this activity here otherwise we'll get into a loop - // when the user hits back - finish(); - - // When launched from shortcut, resume the running game - ServerHelper.doStart(AppView.this, new NvApp("app", details.runningGameId), computer, managerBinder); - } - }); - return; - } - } - } - // App list is the same or empty if (details.rawAppList == null || details.rawAppList.equals(lastRawApplist)) { @@ -274,13 +248,6 @@ public class AppView extends Activity implements AdapterFragmentCallbacks { uuidString = getIntent().getStringExtra(UUID_EXTRA); - launchedFromShortcut = getIntent().getBooleanExtra(SHORTCUT_EXTRA, false); - if (launchedFromShortcut) { - // Display blocking loading spinner - blockingLoadSpinner = SpinnerDialog.displayDialog(this, getResources().getString(R.string.conn_establishing_title), - getResources().getString(R.string.applist_connect_msg), true); - } - shortcutHelper.reportShortcutUsed(uuidString); String labelText = getResources().getString(R.string.title_applist)+" "+getIntent().getStringExtra(NAME_EXTRA); diff --git a/app/src/main/java/com/limelight/AppViewShortcutTrampoline.java b/app/src/main/java/com/limelight/AppViewShortcutTrampoline.java new file mode 100644 index 00000000..19c136ad --- /dev/null +++ b/app/src/main/java/com/limelight/AppViewShortcutTrampoline.java @@ -0,0 +1,119 @@ +package com.limelight; + +import android.app.Activity; +import android.app.Service; +import android.content.ComponentName; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Bundle; +import android.os.IBinder; + +import com.limelight.computers.ComputerManagerListener; +import com.limelight.computers.ComputerManagerService; +import com.limelight.nvstream.http.ComputerDetails; +import com.limelight.nvstream.http.NvApp; +import com.limelight.utils.ServerHelper; +import com.limelight.utils.SpinnerDialog; +import com.limelight.utils.UiHelper; + +import java.util.UUID; + +public class AppViewShortcutTrampoline extends Activity { + private String uuidString; + + private ComputerDetails computer; + private SpinnerDialog blockingLoadSpinner; + + public final static String UUID_EXTRA = "UUID"; + + private ComputerManagerService.ComputerManagerBinder managerBinder; + private final ServiceConnection serviceConnection = new ServiceConnection() { + public void onServiceConnected(ComponentName className, IBinder binder) { + final ComputerManagerService.ComputerManagerBinder localBinder = + ((ComputerManagerService.ComputerManagerBinder)binder); + + // Wait in a separate thread to avoid stalling the UI + new Thread() { + @Override + public void run() { + // Wait for the binder to be ready + localBinder.waitForReady(); + + // Now make the binder visible + managerBinder = localBinder; + + // Get the computer object + computer = managerBinder.getComputer(UUID.fromString(uuidString)); + + // Force CMS to repoll this machine + managerBinder.invalidateStateForComputer(computer.uuid); + + // Start polling + managerBinder.startPolling(new ComputerManagerListener() { + @Override + public void notifyComputerUpdated(final ComputerDetails details) { + // Don't care about other computers + if (!details.uuid.toString().equalsIgnoreCase(uuidString)) { + return; + } + + if (details.state != ComputerDetails.State.UNKNOWN) { + // Close this activity + finish(); + + if (details.runningGameId != 0) { + // A game is running so launch straight to the game activity + ServerHelper.doStart(AppViewShortcutTrampoline.this, + new NvApp("app", details.runningGameId), details, managerBinder); + } + else { + // No game running or computer offline - launch to the AppView + Intent i = new Intent(getIntent()); + i.setClass(AppViewShortcutTrampoline.this, AppView.class); + startActivity(i); + } + } + } + }); + } + }.start(); + } + + public void onServiceDisconnected(ComponentName className) { + managerBinder = null; + } + }; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + UiHelper.notifyNewRootView(this); + + uuidString = getIntent().getStringExtra(UUID_EXTRA); + + // Bind to the computer manager service + bindService(new Intent(this, ComputerManagerService.class), serviceConnection, + Service.BIND_AUTO_CREATE); + + blockingLoadSpinner = SpinnerDialog.displayDialog(this, getResources().getString(R.string.conn_establishing_title), + getResources().getString(R.string.applist_connect_msg), true); + } + + @Override + protected void onPause() { + super.onPause(); + + blockingLoadSpinner.dismiss(); + + if (managerBinder != null) { + unbindService(serviceConnection); + } + + if (managerBinder != null) { + managerBinder.stopPolling(); + } + + finish(); + } +} diff --git a/app/src/main/java/com/limelight/utils/ShortcutHelper.java b/app/src/main/java/com/limelight/utils/ShortcutHelper.java index f7465027..538a6cb9 100644 --- a/app/src/main/java/com/limelight/utils/ShortcutHelper.java +++ b/app/src/main/java/com/limelight/utils/ShortcutHelper.java @@ -5,9 +5,12 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ShortcutInfo; import android.content.pm.ShortcutManager; +import android.graphics.drawable.Icon; import android.os.Build; import com.limelight.AppView; +import com.limelight.AppViewShortcutTrampoline; +import com.limelight.R; import com.limelight.nvstream.http.ComputerDetails; import java.util.Collections; @@ -75,16 +78,16 @@ public class ShortcutHelper { public void createAppViewShortcut(String id, ComputerDetails details) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N_MR1) { - Intent i = new Intent(context, AppView.class); + Intent i = new Intent(context, AppViewShortcutTrampoline.class); i.putExtra(AppView.NAME_EXTRA, details.name); i.putExtra(AppView.UUID_EXTRA, details.uuid.toString()); - i.putExtra(AppView.SHORTCUT_EXTRA, true); i.setAction(Intent.ACTION_DEFAULT); ShortcutInfo sinfo = new ShortcutInfo.Builder(context, id) .setIntent(i) .setShortLabel(details.name) .setLongLabel(details.name) + .setIcon(Icon.createWithResource(context, R.mipmap.ic_pc_scut)) .build(); ShortcutInfo existingSinfo = getInfoForId(id); @@ -98,7 +101,7 @@ public class ShortcutHelper { reapShortcutsForDynamicAdd(); // Add the new shortcut - //TODO: Testing and proper icon - sm.addDynamicShortcuts(Arrays.asList(sinfo)); + sm.addDynamicShortcuts(Collections.singletonList(sinfo)); } } } diff --git a/app/src/main/res/mipmap-hdpi/ic_pc_scut.png b/app/src/main/res/mipmap-hdpi/ic_pc_scut.png new file mode 100644 index 0000000000000000000000000000000000000000..edd9a152e85d278451ee75a84d60450901931f0f GIT binary patch literal 2626 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_pc_scut.png b/app/src/main/res/mipmap-xxxhdpi/ic_pc_scut.png new file mode 100644 index 0000000000000000000000000000000000000000..fe196ebf108756f34563655d662a360e5c9ef6a6 GIT binary patch literal 8781 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 SErGv@fRtXV%hk$Qg#SO}HlG{- literal 0 HcmV?d00001