<commit_before>/*
 * Copyright 2010 Google Inc.
 *
 * 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.google.android.c2dm;

import java.io.IOException;

import android.app.AlarmManager;
import android.app.IntentService;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.util.Log;

import com.stanfy.DebugFlags;

/**
 * Base class for C2D message receiver. Includes constants for the
 * strings used in the protocol.
 */
public abstract class C2DMBaseReceiver extends IntentService {

  /** Debug flag. */
  protected static final boolean DEBUG = DebugFlags.DEBUG_C2DM;

  /** Callback intent action. */
  public static final String REGISTRATION_CALLBACK_INTENT = "com.google.android.c2dm.intent.REGISTRATION";

  /** Logging tag. */
  protected static final String TAG = "C2DM";

  /** Intent actions. */
  private static final String C2DM_RETRY = "com.google.android.c2dm.intent.RETRY",
                              C2DM_INTENT = "com.google.android.c2dm.intent.RECEIVE";


  /** Extras in the registration callback intents. */
  public static final String EXTRA_UNREGISTERED = "unregistered",
                             EXTRA_ERROR = "error",
                             EXTRA_REGISTRATION_ID = "registration_id";

  /** Errors. */
  public static final String ERR_SERVICE_NOT_AVAILABLE = "SERVICE_NOT_AVAILABLE",
                             ERR_ACCOUNT_MISSING = "ACCOUNT_MISSING",
                             ERR_AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED",
                             ERR_TOO_MANY_REGISTRATIONS = "TOO_MANY_REGISTRATIONS",
                             ERR_INVALID_PARAMETERS = "INVALID_PARAMETERS",
                             ERR_INVALID_SENDER = "INVALID_SENDER",
                             ERR_PHONE_REGISTRATION_ERROR = "PHONE_REGISTRATION_ERROR";

  /** wakelock. */
  private static final String WAKELOCK_KEY = "<KEY>";

  /** Wakelock instance. */
  private static PowerManager.WakeLock mWakeLock;

  /** Sender ID. */
  private final String senderId;

  /**
   * The C2DMReceiver class must create a no-arg constructor and pass the
   * sender id to be used for registration.
   */
  public C2DMBaseReceiver(final String senderId) {
    // senderId is used as base name for threads, etc.
    super(senderId);
    this.senderId = senderId;
  }

  /**
   * Called when a cloud message has been received.
   */
  protected abstract void onMessage(Context context, Intent intent);

  /**
   * Called on registration error. Override to provide better
   * error messages.
   *
   * This is called in the context of a Service - no dialog or UI.
   */
  public abstract void onError(Context context, String errorId);

  /**
   * Called when a registration token has been received.
   */
  public void onRegistered(final Context context, final String registrationId) throws IOException {
    // registrationId will also be saved
  }

  /**
   * Called when the device has been unregistered.
   */
  public void onUnregistered(final Context context) {
  }


  @Override
  public final void onHandleIntent(final Intent intent) {
    try {
      final Context context = getApplicationContext();
      if (intent.getAction().equals(REGISTRATION_CALLBACK_INTENT)) {
        handleRegistration(context, intent);
      } else if (intent.getAction().equals(C2DM_INTENT)) {
        onMessage(context, intent);
      } else if (intent.getAction().equals(C2DM_RETRY)) {
        C2DMessaging.register(context, senderId);
      }
    } finally {
      //  Release the power lock, so phone can get back to sleep.
      // The lock is reference counted by default, so multiple
      // messages are ok.

      // If the onMessage() needs to spawn a thread or do something else,
      // it should use it's own lock.
      mWakeLock.release();
    }
  }


  /**
   * Called from the broadcast receiver.
   * Will process the received intent, call handleMessage(), registered(), etc.
   * in background threads, with a wake lock, while keeping the service
   * alive.
   */
  static void runIntentInService(final Context context, final Intent intent) {
    if (mWakeLock == null) {
      // This is called from BroadcastReceiver, there is no init.
      final PowerManager pm =
        (PowerManager) context.getSystemService(Context.POWER_SERVICE);
      mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
          WAKELOCK_KEY);
    }
    mWakeLock.acquire();<commit_msg>enhancements for c2dm<commit_after>/*
 * Copyright 2010 Google Inc.
 *
 * 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.google.android.c2dm;

import java.io.IOException;

import android.app.AlarmManager;
import android.app.IntentService;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;
import android.util.Log;

import com.stanfy.DebugFlags;

/**
 * Base class for C2D message receiver. Includes constants for the
 * strings used in the protocol.
 */
public abstract class C2DMBaseReceiver extends IntentService {

  /** Debug flag. */
  protected static final boolean DEBUG = DebugFlags.DEBUG_C2DM;

  /** Callback intent action. */
  public static final String REGISTRATION_CALLBACK_INTENT = "com.google.android.c2dm.intent.REGISTRATION";

  /** Logging tag. */
  protected static final String TAG = "C2DM";

  /** Intent actions. */
  private static final String C2DM_RETRY = "com.google.android.c2dm.intent.RETRY",
                              C2DM_INTENT = "com.google.android.c2dm.intent.RECEIVE";


  /** Extras in the registration callback intents. */
  public static final String EXTRA_UNREGISTERED = "unregistered",
                             EXTRA_ERROR = "error",
                             EXTRA_REGISTRATION_ID = "registration_id";

  /** Errors. */
  public static final String ERR_SERVICE_NOT_AVAILABLE = "SERVICE_NOT_AVAILABLE",
                             ERR_ACCOUNT_MISSING = "ACCOUNT_MISSING",
                             ERR_AUTHENTICATION_FAILED = "AUTHENTICATION_FAILED",
                             ERR_TOO_MANY_REGISTRATIONS = "TOO_MANY_REGISTRATIONS",
                             ERR_INVALID_PARAMETERS = "INVALID_PARAMETERS",
                             ERR_INVALID_SENDER = "INVALID_SENDER",
                             ERR_PHONE_REGISTRATION_ERROR = "PHONE_REGISTRATION_ERROR";

  /** wakelock. */
  private static final String WAKELOCK_KEY = "<KEY>";

  /** Wakelock instance. */
  private static PowerManager.WakeLock mWakeLock;

  /** Sender ID. */
  private final String senderId;

  /**
   * The C2DMReceiver class must create a no-arg constructor and pass the
   * sender id to be used for registration.
   */
  public C2DMBaseReceiver(final String senderId) {
    // senderId is used as base name for threads, etc.
    super(senderId);
    this.senderId = senderId;
  }

  /**
   * Called when a cloud message has been received.
   */
  protected abstract void onMessage(Context context, Intent intent);

  /**
   * Called on registration error. Override to provide better
   * error messages.
   *
   * This is called in the context of a Service - no dialog or UI.
   */
  public abstract void onError(Context context, String errorId);

  /**
   * Called when a registration token has been received.
   */
  public void onRegistered(final Context context, final String registrationId) throws IOException {
    // registrationId will also be saved
  }

  /**
   * Called when the device has been unregistered.
   */
  public void onUnregistered(final Context context) {
  }


  @Override
  public final void onHandleIntent(final Intent intent) {
    if (onInterceptIntent(intent)) { return; }
    try {
      final Context context = getApplicationContext();
      if (intent.getAction().equals(REGISTRATION_CALLBACK_INTENT)) {
        handleRegistration(context, intent);
      } else if (intent.getAction().equals(C2DM_INTENT)) {
        onMessage(context, intent);
      } else if (intent.getAction().equals(C2DM_RETRY)) {
        C2DMessaging.register(context, senderId);
      }
    } finally {
      //  Release the power lock, so phone can get back to sleep.
      // The lock is reference counted by default, so multiple
      // messages are ok.

      // If the onMessage() needs to spawn a thread or do something else,
      // it should use it's own lock.
      mWakeLock.release();
    }
  }

  /**
   * Called at first from {@link #onHandleIntent(Intent)}.
   * @param intent incoming intent instance
   * @return true if intent is processed
   */
  protected boolean onInterceptIntent(final Intent intent) {
    return false;
  }

  /**
   * Called from the broadcast receiver.
   * Will process the received intent, call handleMessage(), registered(), etc.
   * in background threads, with a wake lock, while keeping the service
   * alive.
   */
  protected static void runIntentInService(final Context context, final Intent intent) {
    if (mWakeLock == null) {
      // This is called from BroadcastReceiver, there is no init.
      final PowerManager pm =
        (PowerManager) context.getSystemService(Context.POWER_SERVICE);
      mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK,
          WAKELOCK_KEY);
    }
    mWakeLock.acquire();
{'fraction_non_alphanumeric': 0.08643050716221448, 'fraction_numerical': 0.004548974061169183, 'mean_word_length': 2.848417132216015, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '15607', 'n_tokens_mistral': 2910, 'n_tokens_neox': 2850, 'n_words': 931}