Guest User

Untitled

a guest
Nov 8th, 2021
158
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.20 KB | None | 0 0
  1. package com.android.systemui.screenshot;
  2.  
  3. import android.app.Service;
  4. import android.content.ComponentName;
  5. import android.content.Intent;
  6. import android.content.ServiceConnection;
  7. import android.os.Handler;
  8. import android.os.HandlerThread;
  9. import android.os.IBinder;
  10. import android.os.Message;
  11. import android.os.Messenger;
  12. import android.os.UserHandle;
  13. import android.os.UserManager;
  14. import com.android.internal.logging.UiEventLogger;
  15. import miui.util.Log;
  16.  
  17. public class TakeScreenshotService extends Service {
  18.     private volatile Messenger mFallbackMessenger;
  19.     private volatile ServiceConnection mFallbackServiceConnection;
  20.     private final Object mFallbackServiceLock = new Object();
  21.     private Handler mProxyHandler;
  22.     private final HandlerThread mProxyThread = new HandlerThread("screen_proxy_thread", -2);
  23.     private volatile Messenger mRealMessenger;
  24.     private volatile ServiceConnection mRealServiceConnection;
  25.     private final Object mServiceLock = new Object();
  26.  
  27.     public TakeScreenshotService(GlobalScreenshot globalScreenshot, UserManager userManager, UiEventLogger uiEventLogger) {
  28.     }
  29.  
  30.     /* access modifiers changed from: private */
  31.     /* access modifiers changed from: public */
  32.     private void bindFallbackService() {
  33.         if (this.mFallbackServiceConnection == null) {
  34.             Log.i("TakeScreenshotService", "bindFallbackService: ");
  35.             ComponentName componentName = new ComponentName("com.android.systemui", "com.android.systemui.screenshot.FallbackTakeScreenshotService");
  36.             Intent intent = new Intent();
  37.             intent.setComponent(componentName);
  38.             AnonymousClass3 r0 = new ServiceConnection() {
  39.                 /* class com.android.systemui.screenshot.TakeScreenshotService.AnonymousClass3 */
  40.  
  41.                 public void onBindingDied(ComponentName componentName) {
  42.                     synchronized (TakeScreenshotService.this.mFallbackServiceLock) {
  43.                         TakeScreenshotService.this.mFallbackMessenger = null;
  44.                         TakeScreenshotService.this.mFallbackServiceLock.notifyAll();
  45.                         if (TakeScreenshotService.this.mFallbackServiceConnection != null) {
  46.                             TakeScreenshotService.this.unbindService(TakeScreenshotService.this.mFallbackServiceConnection);
  47.                             TakeScreenshotService.this.mFallbackServiceConnection = null;
  48.                         }
  49.                     }
  50.                 }
  51.  
  52.                 public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
  53.                     synchronized (TakeScreenshotService.this.mFallbackServiceLock) {
  54.                         TakeScreenshotService.this.mFallbackMessenger = new Messenger(iBinder);
  55.                         TakeScreenshotService.this.mFallbackServiceLock.notifyAll();
  56.                     }
  57.                 }
  58.  
  59.                 public void onServiceDisconnected(ComponentName componentName) {
  60.                     synchronized (TakeScreenshotService.this.mFallbackServiceLock) {
  61.                         TakeScreenshotService.this.mFallbackMessenger = null;
  62.                         TakeScreenshotService.this.mFallbackServiceLock.notifyAll();
  63.                         if (TakeScreenshotService.this.mFallbackServiceConnection != null) {
  64.                             TakeScreenshotService.this.unbindService(TakeScreenshotService.this.mFallbackServiceConnection);
  65.                             TakeScreenshotService.this.mFallbackServiceConnection = null;
  66.                         }
  67.                     }
  68.                 }
  69.             };
  70.             if (bindServiceAsUser(intent, r0, 33554433, UserHandle.CURRENT)) {
  71.                 this.mFallbackServiceConnection = r0;
  72.             }
  73.         }
  74.     }
  75.  
  76.     /* access modifiers changed from: private */
  77.     /* access modifiers changed from: public */
  78.     private void bindRealService() {
  79.         if (this.mRealServiceConnection == null) {
  80.             Log.i("TakeScreenshotService", "bindRealService: ");
  81.             ComponentName componentName = new ComponentName("com.miui.screenshot", "com.miui.screenshot.TakeScreenshotService");
  82.             Intent intent = new Intent();
  83.             intent.setComponent(componentName);
  84.             AnonymousClass2 r0 = new ServiceConnection() {
  85.                 /* class com.android.systemui.screenshot.TakeScreenshotService.AnonymousClass2 */
  86.  
  87.                 public void onBindingDied(ComponentName componentName) {
  88.                     synchronized (TakeScreenshotService.this.mServiceLock) {
  89.                         TakeScreenshotService.this.mRealMessenger = null;
  90.                         TakeScreenshotService.this.mServiceLock.notifyAll();
  91.                         if (TakeScreenshotService.this.mRealServiceConnection != null) {
  92.                             TakeScreenshotService.this.unbindService(TakeScreenshotService.this.mRealServiceConnection);
  93.                             TakeScreenshotService.this.mRealServiceConnection = null;
  94.                         }
  95.                     }
  96.                 }
  97.  
  98.                 public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
  99.                     synchronized (TakeScreenshotService.this.mServiceLock) {
  100.                         TakeScreenshotService.this.mRealMessenger = new Messenger(iBinder);
  101.                         TakeScreenshotService.this.mServiceLock.notifyAll();
  102.                     }
  103.                 }
  104.  
  105.                 public void onServiceDisconnected(ComponentName componentName) {
  106.                     synchronized (TakeScreenshotService.this.mServiceLock) {
  107.                         TakeScreenshotService.this.mRealMessenger = null;
  108.                         TakeScreenshotService.this.mServiceLock.notifyAll();
  109.                         if (TakeScreenshotService.this.mRealServiceConnection != null) {
  110.                             TakeScreenshotService.this.unbindService(TakeScreenshotService.this.mRealServiceConnection);
  111.                             TakeScreenshotService.this.mRealServiceConnection = null;
  112.                         }
  113.                     }
  114.                 }
  115.             };
  116.             if (bindServiceAsUser(intent, r0, 33554433, UserHandle.CURRENT)) {
  117.                 this.mRealServiceConnection = r0;
  118.             }
  119.         }
  120.     }
  121.  
  122.     public IBinder onBind(Intent intent) {
  123.         return new Messenger(this.mProxyHandler).getBinder();
  124.     }
  125.  
  126.     public void onCreate() {
  127.         super.onCreate();
  128.         this.mProxyThread.start();
  129.         this.mProxyHandler = new Handler(this.mProxyThread.getLooper()) {
  130.             /* class com.android.systemui.screenshot.TakeScreenshotService.AnonymousClass1 */
  131.  
  132.             public void handleMessage(Message message) {
  133.                 if (TakeScreenshotService.this.mRealServiceConnection == null) {
  134.                     synchronized (TakeScreenshotService.this.mServiceLock) {
  135.                         TakeScreenshotService.this.bindRealService();
  136.                         try {
  137.                             TakeScreenshotService.this.mServiceLock.wait(500);
  138.                         } catch (InterruptedException e) {
  139.                             e.printStackTrace();
  140.                         }
  141.                     }
  142.                 }
  143.                 boolean z = false;
  144.                 if (TakeScreenshotService.this.mRealMessenger != null) {
  145.                     try {
  146.                         TakeScreenshotService.this.mRealMessenger.send(Message.obtain(message));
  147.                         z = true;
  148.                     } catch (Exception e2) {
  149.                         e2.printStackTrace();
  150.                     }
  151.                 }
  152.                 if (!z) {
  153.                     if (TakeScreenshotService.this.mFallbackServiceConnection == null) {
  154.                         synchronized (TakeScreenshotService.this.mFallbackServiceLock) {
  155.                             TakeScreenshotService.this.bindFallbackService();
  156.                             try {
  157.                                 TakeScreenshotService.this.mFallbackServiceLock.wait(500);
  158.                             } catch (InterruptedException e3) {
  159.                                 e3.printStackTrace();
  160.                             }
  161.                         }
  162.                     }
  163.                     if (TakeScreenshotService.this.mFallbackMessenger != null) {
  164.                         try {
  165.                             TakeScreenshotService.this.mFallbackMessenger.send(Message.obtain(message));
  166.                         } catch (Exception e4) {
  167.                             e4.printStackTrace();
  168.                         }
  169.                     }
  170.                 }
  171.             }
  172.         };
  173.     }
  174.  
  175.     public void onDestroy() {
  176.         super.onDestroy();
  177.         if (this.mRealServiceConnection != null) {
  178.             unbindService(this.mRealServiceConnection);
  179.             this.mRealServiceConnection = null;
  180.             this.mRealMessenger = null;
  181.         }
  182.         if (this.mFallbackServiceConnection != null) {
  183.             unbindService(this.mFallbackServiceConnection);
  184.             this.mFallbackServiceConnection = null;
  185.             this.mFallbackMessenger = null;
  186.         }
  187.         this.mProxyThread.quitSafely();
  188.         Log.d("TakeScreenshotService", "Screenshot Service onDestroy");
  189.     }
  190. }
Advertisement
Add Comment
Please, Sign In to add comment