/*
Copyright (C) 2014 Sergii Pylypenko.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.cups.android;
import android.app.Activity;
import android.app.Service;
import android.content.Context;
import android.os.Bundle;
import android.os.IBinder;
import android.view.MotionEvent;
import android.view.KeyEvent;
import android.view.Window;
import android.view.WindowManager;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.EditText;
import android.text.Editable;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.FrameLayout;
import android.graphics.drawable.Drawable;
import android.graphics.Color;
import android.content.res.Configuration;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Intent;
import android.view.View.OnKeyListener;
import android.view.MenuItem;
import android.view.Menu;
import android.view.Gravity;
import android.text.method.TextKeyListener;
import java.util.LinkedList;
import java.io.SequenceInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.util.Set;
import android.text.SpannedString;
import java.io.BufferedReader;
import java.io.BufferedInputStream;
import java.io.InputStreamReader;
import android.view.inputmethod.InputMethodManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Message;
import android.os.SystemClock;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import android.content.pm.ActivityInfo;
import android.view.Display;
import android.text.InputType;
import android.util.Log;
import android.view.Surface;
import android.app.ProgressDialog;
import android.text.util.Linkify;
import android.provider.Settings;
import android.app.AlertDialog;
import android.widget.ScrollView;
import android.content.DialogInterface;
import android.net.Uri;
import java.util.*;
import java.io.*;
import android.printservice.*;
public class Options
{
public enum DoubleSided
{
NONE(0, null),
SHORT(1, "sides=two-sided-short-edge"),
LONG(2, "sides=two-sided-long-edge");
public final int idx;
public final String lpOption;
public static final String name = "DoubleSided";
DoubleSided(int idx, String str)
{
this.idx = idx;
this.lpOption = str;
}
public static DoubleSided get(PrintJob job)
{
return get(job.getAdvancedIntOption(name));
}
public static DoubleSided get(int i)
{
return DoubleSided.values()[i];
/*
if (i == SHORT.idx)
return SHORT;
if (i == LONG.idx)
return LONG;
return NONE;
*/
}
public static String[] getStrings(Context p)
{
return new String[]
{
p.getResources().getString(R.string.double_sided_none),
p.getResources().getString(R.string.double_sided_short),
p.getResources().getString(R.string.double_sided_long),
};
}
}
public enum MultiplePages
{
X1(0, null),
X2(1, "number-up=2"),
X4(2, "number-up=4"),
X6(3, "number-up=6"),
X9(4, "number-up=9"),
X16(5, "number-up=16");
public final int idx;
public final String lpOption;
public static final String name = "MultiplePages";
MultiplePages(int idx, String str)
{
this.idx = idx;
this.lpOption = str;
}
public static MultiplePages get(PrintJob job)
{
return get(job.getAdvancedIntOption(name));
}
public static MultiplePages get(int i)
{
return MultiplePages.values()[i];
/*
if (i == X2.idx)
return X2;
if (i == X4.idx)
return X4;
if (i == X6.idx)
return X6;
if (i == X9.idx)
return X9;
if (i == X16.idx)
return X16;
return X1;
*/
}
public static String[] getStrings(Context p)
{
return new String[]
{
p.getResources().getString(R.string.multiple_pages_per_sheet_1),
p.getResources().getString(R.string.multiple_pages_per_sheet_2),
p.getResources().getString(R.string.multiple_pages_per_sheet_4),
p.getResources().getString(R.string.multiple_pages_per_sheet_6),
p.getResources().getString(R.string.multiple_pages_per_sheet_9),
p.getResources().getString(R.string.multiple_pages_per_sheet_16),
};
}
}
public static final String optionsExt = ".cfg";
public static void loadOptions(final AdvancedPrintOptionsActivity p, final String printer)
{
try
{
ObjectInputStream in = new ObjectInputStream(p.openFileInput(printer + optionsExt));
p.doubleSided.setSelection(in.readInt());
p.multiplePages.setSelection(in.readInt());
in.close();
}
catch (Exception e)
{
Log.i(TAG, "Cannot load options file for printer " + printer);
p.doubleSided.setSelection(0);
p.multiplePages.setSelection(0);
}
}
public static void saveOptions(final AdvancedPrintOptionsActivity p, final String printer)
{
try
{
ObjectOutputStream out = new ObjectOutputStream(p.openFileOutput(printer + optionsExt, p.MODE_PRIVATE));
out.writeInt((int)p.doubleSided.getSelectedItemId());
out.writeInt((int)p.multiplePages.getSelectedItemId());
out.close();
}
catch (Exception e)
{
Log.i(TAG, "Cannot save options file for printer " + printer);
}
}
static public final String TAG = "PrintOptions";
}