android {
  compileSdkVersion 'android-O'
  buildToolsVersion '26.0.0-rc1'

  defaultConfig {
    targetSdkVersion 'O'
  }
  ...
}

dependencies {
  compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
}

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String id = "ID_DU_CHANNEL";
CharSequence name = "Le nom du channel visible par l’utilisateur";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(id, name, importance);

// Configuration du channel puis création
channel.enableLights(true);
channel.setLightColor(Color.RED);
channel.enableVibration(true);
notificationManager.createNotificationChannel(channel);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Id de notification qui peut être mis à jour
int notiId = 1;
// Id du channel de rattachement
String CHANNEL_ID = "ID_DU_CHANNEL";

// Création de la notification et rattachement au channel
Notification notification = new Notification.Builder(this)
        .setContentTitle("Ma Notification")
        .setContentText("Android O c’est top avec SSaurel")
        .setSmallIcon(R.drawable.ic_notif)
        .setChannel(CHANNEL_ID)
        .build();

// Envoi
notificationManager.notify(notiId, notification);

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
// Récupération du channel
NotificationChannel notificationChannel = notificationManager.getNotificationChannel(“ID_DU_CHANNEL”);
// Récupération du paramétrage du channel
Uri soundUri = notificationChannel.getSound() ;
int lightColor = notificationChannel.getLightColor();
long[] vibrationPattern = notificationChannel.getVibrationPattern();
Il demeure possible de proposer à l’utilisateur de mettre à jour les propriétés d’un channel de notifications en le redirigeant vers l’activité dédiée en passant en paramètre le nom de package de l’application ainsi que l’identifiant du channel :
Intent intent = new Intent(Settings.ACTION_CHANNEL_NOTIFICATION_SETTINGS);
intent.putExtra(Settings.EXTRA_CHANNEL_ID, mChannel.getId());
intent.putExtra(Settings.EXTRA_APP_PACKAGE, getPackageName());
startActivity(intent);
Enfin, la suppression d’un channel de notifications peut se faire en récupérant une instance donnée via son identifiant puis en passant cette dernière en entrée de la méthode deleteNotificationChannel du NotificationManager :
NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
String id = "ID_DU_CHANNEL";
NotificationChannel mChannel = mNotificationManager.getNotificationChannel(id);
mNotificationManager.deleteNotificationChannel(mChannel);

public MyView extends View {
   public MyView(Context context, AttributeSet attrs) {
      super(context, attrs) ;
      // …
   }

   public void autoFill(AutoFillValue value) {
      // Gestion de la valeur auto complétée …
   }

   public AutoFillType getAutoFillType() {
      // définition de l’objet AutoFillType à retourner
      return … ;
   }

   public AutoFillValue getAutoFillValue() {
      // définition de l’objet AutoFillValue à retourner
      return … ;

   }
}

<activity android:name="VideoPlaybackActivity"
    android:supportsPictureInPicture="true" 
    ...>

@Override
public void onPictureInPictureModeChanged(boolean isInPIPMode) {
    if (isInPIPMode) {
        // Entrée Mode PIP : on cache éléments UI superflus
        ...
    } else {
        // Sortie Mode PIP : on restaure les éléments UI
        ...
    }
}

@Override
public void onPause() {
    // Pas de pause de la lecture vidéo en mode PIP
    if (isInPictureInPictureMode()) {
        ...
    } else {
    // On n’est pas en mode PIP, pause de la vidéo
       ...
    }
}

ComponentName myService = new ComponentName(this, MyService.class);
JobInfo myJob = new JobInfo.Builder(myService)
        .setRequiresCharging(true)
        .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
        .setPersisted(true)
        .build();

JobScheduler jobScheduler = (JobScheduler) getSystemService(Context.JOB_SCHEDULER_SERVICE);
jobScheduler.schedule(myJob);

...
<receiver android:name=".ChargerReceiver">
    <intent-filter>
        <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
    </intent-filter>
</receiver>
...

public class MainActivity extends AppCompatActivity {
    private BroadcastReceiver chargerReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        chargerReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                // code …
            }
        };

        registerReceiver(chargerReceiver,
                new IntentFilter(Intent.ACTION_POWER_CONNECTED)
        );
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(chargerReceiver);
    }
}

<maskable-icon>
    <background android:drawable="@color/ic_background"/>
    <foreground android:drawable="@mipmap/ic_foreground"/>
</maskable-icon>