GCMRegistrar.java 9.29 KB
package com.google.android.gcm;

import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.os.Build.VERSION;
import android.util.Log;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public final class GCMRegistrar
{
  private static GCMBroadcastReceiver a;
  
  private GCMRegistrar()
  {
    throw new UnsupportedOperationException();
  }
  
  static void a(Context paramContext)
  {
    Log.v("GCMRegistrar", "Unregistering app " + paramContext.getPackageName());
    Intent localIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER");
    localIntent.setPackage("com.google.android.gsf");
    localIntent.putExtra("app", PendingIntent.getBroadcast(paramContext, 0, new Intent(), 0));
    paramContext.startService(localIntent);
  }
  
  static void a(Context paramContext, int paramInt)
  {
    paramContext = paramContext.getSharedPreferences("com.google.android.gcm", 0).edit();
    paramContext.putInt("backoff_ms", paramInt);
    paramContext.commit();
  }
  
  private static void a(Context paramContext, Set<String> paramSet, String paramString)
  {
    PackageManager localPackageManager = paramContext.getPackageManager();
    paramContext = paramContext.getPackageName();
    Intent localIntent = new Intent(paramString);
    localIntent.setPackage(paramContext);
    paramContext = localPackageManager.queryBroadcastReceivers(localIntent, 32);
    if (paramContext.isEmpty()) {
      throw new IllegalStateException("No receivers for action " + paramString);
    }
    if (Log.isLoggable("GCMRegistrar", 2)) {
      Log.v("GCMRegistrar", "Found " + paramContext.size() + " receivers for action " + paramString);
    }
    paramContext = paramContext.iterator();
    while (paramContext.hasNext())
    {
      paramString = ((ResolveInfo)paramContext.next()).activityInfo.name;
      if (!paramSet.contains(paramString)) {
        throw new IllegalStateException("Receiver " + paramString + " is not set with permission com.google.android.c2dm.permission.SEND");
      }
    }
  }
  
  static void a(Context paramContext, String... paramVarArgs)
  {
    if ((paramVarArgs == null) || (paramVarArgs.length == 0)) {
      throw new IllegalArgumentException("No senderIds");
    }
    Object localObject = new StringBuilder(paramVarArgs[0]);
    int i = 1;
    while (i < paramVarArgs.length)
    {
      ((StringBuilder)localObject).append(',').append(paramVarArgs[i]);
      i += 1;
    }
    paramVarArgs = ((StringBuilder)localObject).toString();
    Log.v("GCMRegistrar", "Registering app " + paramContext.getPackageName() + " of senders " + paramVarArgs);
    localObject = new Intent("com.google.android.c2dm.intent.REGISTER");
    ((Intent)localObject).setPackage("com.google.android.gsf");
    ((Intent)localObject).putExtra("app", PendingIntent.getBroadcast(paramContext, 0, new Intent(), 0));
    ((Intent)localObject).putExtra("sender", paramVarArgs);
    paramContext.startService((Intent)localObject);
  }
  
  static void b(Context paramContext)
  {
    new StringBuilder("resetting backoff for ").append(paramContext.getPackageName());
    a(paramContext, 3000);
  }
  
  static int c(Context paramContext)
  {
    return paramContext.getSharedPreferences("com.google.android.gcm", 0).getInt("backoff_ms", 3000);
  }
  
  public static void checkDevice(Context paramContext)
  {
    int i = Build.VERSION.SDK_INT;
    if (i < 8) {
      throw new UnsupportedOperationException("Device must be at least API Level 8 (instead of " + i + ")");
    }
    paramContext = paramContext.getPackageManager();
    try
    {
      paramContext.getPackageInfo("com.google.android.gsf", 0);
      return;
    }
    catch (PackageManager.NameNotFoundException paramContext)
    {
      throw new UnsupportedOperationException("Device does not have package com.google.android.gsf");
    }
  }
  
  public static void checkManifest(Context paramContext)
  {
    PackageManager localPackageManager = paramContext.getPackageManager();
    Object localObject1 = paramContext.getPackageName();
    Object localObject2 = (String)localObject1 + ".permission.C2D_MESSAGE";
    try
    {
      localPackageManager.getPermissionInfo((String)localObject2, 4096);
      if (!Log.isLoggable("GCMRegistrar", 2)) {
        break label187;
      }
    }
    catch (PackageManager.NameNotFoundException paramContext)
    {
      try
      {
        localObject2 = localPackageManager.getPackageInfo((String)localObject1, 2);
        localObject2 = ((PackageInfo)localObject2).receivers;
        if ((localObject2 != null) && (localObject2.length != 0)) {
          break label145;
        }
        throw new IllegalStateException("No receiver for package " + (String)localObject1);
      }
      catch (PackageManager.NameNotFoundException paramContext)
      {
        throw new IllegalStateException("Could not get receivers for package " + (String)localObject1);
      }
      paramContext = paramContext;
      throw new IllegalStateException("Application does not define permission " + (String)localObject2);
    }
    label145:
    Log.v("GCMRegistrar", "number of receivers for " + (String)localObject1 + ": " + localObject2.length);
    label187:
    localObject1 = new HashSet();
    int j = localObject2.length;
    int i = 0;
    while (i < j)
    {
      localPackageManager = localObject2[i];
      if ("com.google.android.c2dm.permission.SEND".equals(localPackageManager.permission)) {
        ((Set)localObject1).add(localPackageManager.name);
      }
      i += 1;
    }
    if (((Set)localObject1).isEmpty()) {
      throw new IllegalStateException("No receiver allowed to receive com.google.android.c2dm.permission.SEND");
    }
    a(paramContext, (Set)localObject1, "com.google.android.c2dm.intent.REGISTRATION");
    a(paramContext, (Set)localObject1, "com.google.android.c2dm.intent.RECEIVE");
  }
  
  public static String clearRegistrationId(Context paramContext)
  {
    return setRegistrationId(paramContext, "");
  }
  
  private static int d(Context paramContext)
  {
    try
    {
      int i = paramContext.getPackageManager().getPackageInfo(paramContext.getPackageName(), 0).versionCode;
      return i;
    }
    catch (PackageManager.NameNotFoundException paramContext)
    {
      throw new RuntimeException("Coult not get package name: " + paramContext);
    }
  }
  
  public static String getRegistrationId(Context paramContext)
  {
    Object localObject = paramContext.getSharedPreferences("com.google.android.gcm", 0);
    String str = ((SharedPreferences)localObject).getString("regId", "");
    int i = ((SharedPreferences)localObject).getInt("appVersion", Integer.MIN_VALUE);
    int j = d(paramContext);
    localObject = str;
    if (i != Integer.MIN_VALUE)
    {
      localObject = str;
      if (i != j)
      {
        Log.v("GCMRegistrar", "App version changed from " + i + " to " + j + "; resetting registration id");
        clearRegistrationId(paramContext);
        localObject = "";
      }
    }
    return (String)localObject;
  }
  
  public static boolean isRegistered(Context paramContext)
  {
    return getRegistrationId(paramContext).length() > 0;
  }
  
  public static boolean isRegisteredOnServer(Context paramContext)
  {
    boolean bool = paramContext.getSharedPreferences("com.google.android.gcm", 0).getBoolean("onServer", false);
    Log.v("GCMRegistrar", "Is registered on server: " + bool);
    return bool;
  }
  
  public static void onDestroy(Context paramContext)
  {
    try
    {
      if (a != null)
      {
        Log.v("GCMRegistrar", "Unregistering receiver");
        paramContext.unregisterReceiver(a);
        a = null;
      }
      return;
    }
    finally
    {
      paramContext = finally;
      throw paramContext;
    }
  }
  
  public static void register(Context paramContext, String... paramVarArgs)
  {
    b(paramContext);
    a(paramContext, paramVarArgs);
  }
  
  public static void setRegisteredOnServer(Context paramContext, boolean paramBoolean)
  {
    paramContext = paramContext.getSharedPreferences("com.google.android.gcm", 0);
    Log.v("GCMRegistrar", "Setting registered on server status as: " + paramBoolean);
    paramContext = paramContext.edit();
    paramContext.putBoolean("onServer", paramBoolean);
    paramContext.commit();
  }
  
  public static String setRegistrationId(Context paramContext, String paramString)
  {
    SharedPreferences localSharedPreferences = paramContext.getSharedPreferences("com.google.android.gcm", 0);
    String str = localSharedPreferences.getString("regId", "");
    int i = d(paramContext);
    Log.v("GCMRegistrar", "Saving regId on app version " + i);
    paramContext = localSharedPreferences.edit();
    paramContext.putString("regId", paramString);
    paramContext.putInt("appVersion", i);
    paramContext.commit();
    return str;
  }
  
  public static void unregister(Context paramContext)
  {
    b(paramContext);
    a(paramContext);
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/android/gcm/GCMRegistrar.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */