Skip to content

Commit 793c648

Browse files
committed
添加与不同进程的负一屏通信代码
1 parent 895c8c5 commit 793c648

File tree

14 files changed

+284
-68
lines changed

14 files changed

+284
-68
lines changed

build.gradle

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ buildscript {
22
repositories {
33
jcenter()
44
google()
5+
mavenCentral()
56
}
67
dependencies {
78
classpath 'com.android.tools.build:gradle:3.6.1'
@@ -105,13 +106,15 @@ android {
105106
}
106107
}
107108

108-
repositories {
109-
maven { url "../../../prebuilts/fullsdk-darwin/extras/android/m2repository" }
110-
maven { url "../../../prebuilts/fullsdk-linux/extras/android/m2repository" }
111-
google()
112-
jcenter()
109+
allprojects {
110+
repositories {
111+
maven { url "../../../prebuilts/fullsdk-darwin/extras/android/m2repository" }
112+
maven { url "../../../prebuilts/fullsdk-linux/extras/android/m2repository" }
113+
google()
114+
jcenter()
115+
mavenCentral()
116+
}
113117
}
114-
115118
dependencies {
116119
implementation 'androidx.appcompat:appcompat:1.1.0'
117120
implementation 'androidx.legacy:legacy-support-v4:1.0.0'

effectivecard/build.gradle

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,17 @@ android {
2323

2424
}
2525

26+
repositories {
27+
maven { url "../../../prebuilts/fullsdk-darwin/extras/android/m2repository" }
28+
maven { url "../../../prebuilts/fullsdk-linux/extras/android/m2repository" }
29+
mavenCentral()
30+
google()
31+
jcenter()
32+
}
33+
2634
dependencies {
2735
implementation fileTree(dir: 'libs', include: ['*.jar'])
28-
36+
implementation project(':mxlibrary')
2937
implementation 'androidx.appcompat:appcompat:1.1.0'
3038
testImplementation 'junit:junit:4.12'
3139
androidTestImplementation 'androidx.test.ext:junit:1.1.1'

effectivecard/src/main/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
package="com.codemx.effectivecard">
33

44
<application>
5-
<service android:name=".CardService"
6-
android:process="com.codemx.effectivecard">
5+
<service
6+
android:name="com.codemx.effectivecard.CardService"
7+
android:enabled="true"
8+
android:exported="true">
79
<intent-filter>
810
<action android:name="com.codemx.launcher3.WINDOW_OVERLAY" />
911
</intent-filter>

effectivecard/src/main/java/com/codemx/effectivecard/CardService.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
public class CardService extends Service {
1818

1919
private ILauncherOverlay.Stub mStub;
20-
private WindowManager.LayoutParams mParams;
2120
private ILauncherOverlayCallback mCallback;
2221

2322
@Override
@@ -31,34 +30,29 @@ public IBinder onBind(Intent intent) {
3130
return mStub;
3231
}
3332

34-
private class CardBinder extends ILauncherOverlay.Stub {
33+
// Launcher通过服务会调用这里的函数来达到与launcher同步,然后控制window滑动
34+
private static class CardBinder extends ILauncherOverlay.Stub {
3535

3636
@Override
3737
public void startScroll() throws RemoteException {
38-
3938
}
4039

4140
@Override
4241
public void onScroll(float progress) throws RemoteException {
43-
4442
}
4543

4644
@Override
4745
public void endScroll() throws RemoteException {
48-
4946
}
5047

5148
@Override
5249
public void windowAttached(WindowManager.LayoutParams layoutParams,
5350
ILauncherOverlayCallback overlayCallback, int flags) throws RemoteException {
54-
mParams = layoutParams;
55-
mCallback = overlayCallback;
5651

5752
}
5853

5954
@Override
6055
public void windowDetached(boolean isChangingConfigurations) throws RemoteException {
61-
6256
}
6357

6458
@Override
@@ -68,17 +62,14 @@ public void closeOverlay(int flags) throws RemoteException {
6862

6963
@Override
7064
public void onPause() throws RemoteException {
71-
7265
}
7366

7467
@Override
7568
public void onResume() throws RemoteException {
76-
7769
}
7870

7971
@Override
8072
public void openOverlay(int flags) throws RemoteException {
81-
8273
}
8374

8475
@Override

effectivecard/src/main/java/com/codemx/effectivecard/CardWindowManager.java

Lines changed: 24 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,51 +3,59 @@
33
import android.content.Context;
44
import android.content.pm.PackageManager;
55
import android.graphics.PixelFormat;
6-
import android.util.Log;
76
import android.view.Gravity;
7+
import android.view.LayoutInflater;
88
import android.view.View;
99
import android.view.WindowManager;
1010

11+
import com.codemx.effectivecard.launcherclient.Constant;
12+
1113
/**
1214
* Created by yuchuan
1315
* DATE 2020/4/17
1416
* TIME 16:03
1517
*/
1618
public class CardWindowManager {
1719

18-
Context mContext;
19-
WindowManager mWindowManager;
20-
WindowManager.LayoutParams mParams;
21-
View mContentView;
20+
private Context mContext;
21+
private Context mCardContext;
22+
private WindowManager mWindowManager;
23+
private WindowManager.LayoutParams mParams;
24+
private View mContentView;
2225

23-
private void initApplicationWindow(Context context) {
24-
try{
25-
mContext = context.createPackageContext("chenchao.example.com.appclient", Context.CONTEXT_IGNORE_SECURITY);
26-
Log.i("chenchao","mContext =" +mContext.getApplicationInfo().toString());
27-
mWindowManager = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE);
26+
public CardWindowManager(Context context) {
27+
mContext = context;
28+
initApplicationWindow();
29+
}
2830

31+
private void initApplicationWindow() {
32+
try {
33+
mCardContext = mContext.createPackageContext(Constant.GSA_PACKAGE, Context.CONTEXT_IGNORE_SECURITY);
34+
mWindowManager = (WindowManager) mCardContext.getSystemService(Context.WINDOW_SERVICE);
2935
mParams = new WindowManager.LayoutParams();
30-
mParams.packageName ="chenchao.example.com.appclient";
36+
mParams.packageName = Constant.GSA_PACKAGE;
3137
mParams.type = WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA;
3238
mParams.format = PixelFormat.RGBA_8888;
3339
mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |
3440
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS;
3541
mParams.gravity = Gravity.TOP | Gravity.LEFT;
3642
mParams.width = WindowManager.LayoutParams.MATCH_PARENT;
3743
mParams.height = WindowManager.LayoutParams.MATCH_PARENT;
38-
} catch (PackageManager.NameNotFoundException n){
44+
} catch (PackageManager.NameNotFoundException n) {
3945
n.printStackTrace();
4046
}
4147
}
4248

43-
private void initView(){
44-
49+
private void initView() {
50+
mContentView = LayoutInflater.from(mCardContext).inflate(R.layout.layout_card, null);
4551
}
4652

47-
private void showWindow(){
53+
public void showWindow() {
54+
initView();
4855
mWindowManager.addView(mContentView, mParams);
4956
}
50-
private void hideWindow(){
57+
58+
public void hideWindow() {
5159
mWindowManager.removeView(mContentView);
5260
}
5361

effectivecard/src/main/java/com/codemx/effectivecard/launcherclient/LauncherClient.java

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
import android.content.Intent;
88
import android.content.IntentFilter;
99
import android.content.ServiceConnection;
10-
import android.net.Uri;
1110
import android.os.IBinder;
12-
import android.os.Process;
1311
import android.os.RemoteException;
1412
import android.util.Log;
1513
import android.view.WindowManager.LayoutParams;
1614

15+
import com.android.mxlibrary.util.XLog;
16+
import com.codemx.effectivecard.CardService;
17+
1718
public class LauncherClient {
1819
private static final boolean HIDE_WINDOW_WHEN_OVERLAY_OPEN = false;
1920
private static final String TAG = "DrawerOverlayClient";
@@ -63,6 +64,7 @@ public LauncherClient(Activity activity, LauncherClientCallbacks callbacks, bool
6364
}
6465

6566
public LauncherClient(Activity activity, LauncherClientCallbacks callbacks, String targetPackage, boolean overlayEnabled) {
67+
XLog.d(XLog.getTag(), XLog.TAG_GU_STATE + " LauncherClient ");
6668
mUpdateReceiver = new BroadcastReceiver() {
6769
public void onReceive(Context context, Intent intent) {
6870
Log.d("LauncherClient", "PACKAGE_ADDED reconnect");
@@ -188,16 +190,19 @@ private void removeClient(boolean removeAppConnection) {
188190
private void reconnect() {
189191
if (!mDestroyed && mServiceConnectionOptions == OPTIONS_FLAG_DEFAULT) {
190192
if (mState == STATE_DISCONNECTED) {
193+
XLog.d(XLog.getTag(), XLog.TAG_GU_STATE + " sApplicationConnection: " + sApplicationConnection);
191194
if (sApplicationConnection != null && !sApplicationConnection.packageName.equals(mServiceIntent.getPackage())) {
192195
mActivity.getApplicationContext().unbindService(sApplicationConnection);
193196
sApplicationConnection = null;
194197
}
198+
XLog.d(XLog.getTag(), XLog.TAG_GU_STATE + " sApplicationConnection2: " + sApplicationConnection);
195199
if (sApplicationConnection == null) {
196200
sApplicationConnection = new AppServiceConnection(mServiceIntent.getPackage());
197-
if (!connectSafely(mActivity.getApplicationContext(), sApplicationConnection, 32)) {
201+
if (!connectSafely(mActivity.getApplicationContext(), sApplicationConnection, Context.BIND_WAIVE_PRIORITY)) {
198202
sApplicationConnection = null;
199203
}
200204
}
205+
XLog.d(XLog.getTag(), XLog.TAG_GU_STATE + " sApplicationConnection3: " + sApplicationConnection);
201206
if (sApplicationConnection != null) {
202207
mState = STATE_CONNECTING;
203208
if (connectSafely(mActivity, mServiceConnection, 192)) {
@@ -220,7 +225,11 @@ public void run() {
220225

221226
private boolean connectSafely(Context context, ServiceConnection conn, int flags) {
222227
try {
223-
return context.bindService(mServiceIntent, conn, flags | Context.BIND_AUTO_CREATE);
228+
Intent intent = new Intent(Constant.ACTION);
229+
intent.setPackage(Constant.GSA_PACKAGE);
230+
intent.setClass(context, CardService.class);
231+
return context.bindService(intent, conn, Context.BIND_AUTO_CREATE);
232+
// return context.bindService(mServiceIntent, conn, flags | Context.BIND_AUTO_CREATE);
224233
} catch (SecurityException var5) {
225234
Log.e("LauncherClient", "Unable to connect to overlay service", var5);
226235
return false;
@@ -355,15 +364,22 @@ void notifyStatusChanged(int status) {
355364
}
356365

357366
static Intent getServiceIntent(Context context, String targetPackage) {
358-
String str = String.valueOf(context.getPackageName());
359-
int var4 = Process.myUid();
360-
Uri uri = Uri.parse((new StringBuilder(18 + str.length()))
361-
.append("app://")
362-
.append(str)
363-
.append(":")
364-
.append(var4)
365-
.toString()).buildUpon().appendQueryParameter("v", Integer.toString(0)).build();
366-
return (new Intent(Constant.ACTION)).setPackage(targetPackage).setData(uri);
367+
String packageName = context.getPackageName();
368+
// return new Intent(Constant.ACTION)
369+
// .setPackage(Constant.GSA_PACKAGE)
370+
// .setData(Uri.parse(new StringBuilder(String.valueOf(packageName).length() + 18)
371+
// .append("app://")
372+
// .append(packageName)
373+
// .append(":")
374+
// .append(Process.myUid())
375+
// .toString()).buildUpon()
376+
// .appendQueryParameter("v", Integer.toString(9))
377+
// .appendQueryParameter("cv", Integer.toString(14))
378+
// .build());
379+
380+
Intent intent = new Intent(Constant.ACTION);
381+
intent.setPackage(Constant.GSA_PACKAGE);
382+
return intent;
367383
}
368384

369385
private static final class AppServiceConnection implements ServiceConnection {
465 KB
Loading

effectivecard/src/main/res/layout/layout_card.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,10 @@
33
android:layout_width="match_parent"
44
android:layout_height="match_parent"
55
android:orientation="vertical">
6+
<ImageView
7+
android:layout_width="match_parent"
8+
android:layout_height="match_parent"
9+
android:src="@drawable/plus"
10+
android:scaleType="centerCrop"/>
611

712
</LinearLayout>

launcherclient/build.gradle

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,14 @@ android {
2323

2424
}
2525

26+
repositories {
27+
maven { url "../../../prebuilts/fullsdk-darwin/extras/android/m2repository" }
28+
maven { url "../../../prebuilts/fullsdk-linux/extras/android/m2repository" }
29+
mavenCentral()
30+
google()
31+
jcenter()
32+
}
33+
2634
dependencies {
2735
implementation fileTree(dir: 'libs', include: ['*.jar'])
2836

launcherclient/src/main/java/com/google/android/libraries/gsa/launcherclient/LauncherClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,7 @@ private final void m51a(boolean z) {
301301

302302
public void reconnect() {
303303
if (!this.mDestroyed) {
304-
if (!this.sApplicationConnection.mo74c() || !this.mSimpleServiceConnection.mo74c()) {
304+
if (!this.sApplicationConnection.reconnect() || !this.mSimpleServiceConnection.reconnect()) {
305305
this.mActivity.runOnUiThread(new NotifyStatusRunnable(this));
306306
}
307307
}
@@ -485,8 +485,8 @@ public void dump(String str, PrintWriter printWriter) {
485485
printWriter.println(String.valueOf(str).concat("LauncherClient"));
486486
String concat = String.valueOf(str).concat(" ");
487487
printWriter.println(new StringBuilder(concat.length() + 18).append(concat).append("isConnected: ").append(isConnected()).toString());
488-
printWriter.println(new StringBuilder(concat.length() + 18).append(concat).append("act.isBound: ").append(this.mSimpleServiceConnection.mo73b()).toString());
489-
printWriter.println(new StringBuilder(concat.length() + 18).append(concat).append("app.isBound: ").append(this.sApplicationConnection.mo73b()).toString());
488+
printWriter.println(new StringBuilder(concat.length() + 18).append(concat).append("act.isBound: ").append(this.mSimpleServiceConnection.isConnected()).toString());
489+
printWriter.println(new StringBuilder(concat.length() + 18).append(concat).append("app.isBound: ").append(this.sApplicationConnection.isConnected()).toString());
490490
printWriter.println(new StringBuilder(concat.length() + 27).append(concat).append("serviceVersion: ").append(sServiceVersion).toString());
491491
printWriter.println(new StringBuilder(concat.length() + 17).append(concat).append("clientVersion: 14").toString());
492492
printWriter.println(new StringBuilder(concat.length() + 27).append(concat).append("mActivityState: ").append(this.mState).toString());

0 commit comments

Comments
 (0)