Download as pdf or txt
Download as pdf or txt
You are on page 1of 38

G.B. Pant Govt.

Engineering College
(Govt. of NCT of Delhi)
Okhla Industrial Estate Phase-III, New Delhi-110020

Department of Computer Science


B.Tech (CSE) - 8th Semester
MOBILE COMPUTING LAB
(ETIT-452)

Submitted to: Submitted by:


Dr. Sushil Kumar Urvashi Gupta
04220902717
List of Practical

Sr. No. Practical Page No.

1. Develop a Calculator for Android Platform using any mobile phone 1-4
interface.

2. Develop a Phone Book for Android Platform using any mobile phone 5-8
interface.

3. Develop a Digital Clock for Android Platform using any mobile phone 9-10
interface.

4. Develop a Unit Converter for Android Platform using any mobile phone 11-16
interface.

5. Develop a Text Editor for Android Platform using any mobile phone 17-23
interface.

6. Develop a Tic Tac Toe game for Android Platform using any mobile 24-33
phone interface.

7. Implement mobile ad-hoc network using NS2 34

8. Implement AODV routing protocol using NS2/NS2 35-36


Experiment 1
AIM: Develop a Calculator for Andriod Platform using any mobile phone
interface.
SOURCE CODE:

MainActivity.java

package com.example.gfg_my_first_app;
  
import androidx.appcompat.app.AppCompatActivity;
  
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
  
public class MainActivity extends AppCompatActivity {
  
    EditText e1, e2;
    TextView t1;
    int num1, num2;
  
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
  
        setContentView(R.layout.activity_main);
    }
  
    // a public method to get the input numbers
    public boolean getNumbers()
    {
  
        // defining the edit text 1 to e1
        e1 = (EditText)findViewById(R.id.num1);
  
        // defining the edit text 2 to e2
        e2 = (EditText)findViewById(R.id.num2);
  
        // defining the text view to t1
        t1 = (TextView)findViewById(R.id.result);
  

1
        // taking input from text box 1
        s1 = e1.getText().toString();
  
        // taking input from text box 2
        s2 = e2.getText().toString();
  
        // condition to check if box is not empty
        if ((s1.equals(null) && s2.equals(null))
            || (s1.equals("") && s2.equals(""))) {
  
            String result = "Please enter a value";
            t1.setText(result);
  
            return false;
        }
        else {
            // converting string to int.
            num1 = Integer.parseInt(e1.getText().toString());
  
            // converting string to int.
            num2 = Integer.parseInt(e2.getText().toString());
        }
  
        return true;
    }
  
    // a public method to perform addition
    public void doSum(View v)
    {
  
        // get the input numbers
        if (getNumbers()) {
            int sum = num1 + num2;
            t1.setText(Integer.toString(sum));
        }
    }
  
    // a public method to perform power function
    public void doPow(View v)
    {
  
        // get the input numbers
        if (getNumbers()) {
            double sum = Math.pow(num1, num2);
            t1.setText(Double.toString(sum));
        }
    }
  
    // a public method to perform subtraction
    public void doSub(View v)

2
    {
  
        // get the input numbers
        if (getNumbers()) {
            int sum = num1 - num2;
            t1.setText(Integer.toString(sum));
        }
    }
  
    // a public method to perform multiplication
    public void doMul(View v)
    {
  
        // get the input numbers
        if (getNumbers()) {
            int sum = num1 * num2;
            t1.setText(Integer.toString(sum));
        }
    }
    // a public method to perform Division
    public void doDiv(View v)
    {
  
        // get the input numbers
        if (getNumbers()) {
  
            // displaying the text in text view assigned as t1
            double sum = num1 / (num2 * 1.0);
            t1.setText(Double.toString(sum));
        }
    }
    // a public method to perform modulus function
    public void doMod(View v)
    {
  
        // get the input numbers
        if (getNumbers()) {
            double sum = num1 % num2;
            t1.setText(Double.toString(sum));
        }
    }
}

3
OUTPUT:

4
Experiment 2
AIM: Develop a Phone Book for Andriod Platform using any mobile phone
interface.
SOURCE CODE:
PhoneBook
package pete.android.study;
 
import android.graphics.Bitmap;
 
public class PhoneBook {
    private Bitmap mAvatar;
    private String mName;
    private String mPhone;
    private String mEmail;
 
    public PhoneBook(Bitmap avatar, String name, String phone, String email) {
        mAvatar = avatar;
        mName = name;
        mPhone = phone;
        mEmail = email;
    }
 
    public void setAvatar(Bitmap avatar) {
        mAvatar = avatar;
    }
    public Bitmap getAvatar() {
        return mAvatar;
    }
 
    public void setName(String name) {
        mName = name;
    }
    public String getName() {
        return mName;
    }
 
    public void setPhone(String phone) {
        mPhone = phone;
    }
    public String getPhone() {
        return mPhone;
    }
 
    public void setEmail(String email) {
        mEmail = email;
    }

5
    public String getEmail() {
        return mEmail;
    }
}

PhoneBookAdapter

package pete.android.study;
 
import java.util.List;
 
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
 
public class PhoneBookAdapter extends BaseAdapter {
    private Context mContext;
    private List<PhoneBook> mListPhoneBook;
 
    public PhoneBookAdapter(Context context, List<PhoneBook> list) {
        mContext = context;
        mListPhoneBook = list;
 
    }
 
    @Override
    public int getCount() {
        return mListPhoneBook.size();
    }
 
    @Override
    public Object getItem(int pos) {
        return mListPhoneBook.get(pos);
    }
 
    @Override
    public long getItemId(int pos) {
        return pos;
    }
 
    @Override
    public View getView(int pos, View convertView, ViewGroup parent) {
        // get selected entry
        PhoneBook entry = mListPhoneBook.get(pos);
 

6
        // inflating list view layout if null
        if(convertView == null) {
            LayoutInflater inflater = LayoutInflater.from(mContext);
            convertView = inflater.inflate(R.layout.phonebook_row, null);
        }
 
        // set avatar
        ImageView ivAvatar = (ImageView)convertView.findViewById(R.id.imgAvatar);
        ivAvatar.setImageBitmap(entry.getAvatar());
 
        // set name
        TextView tvName = (TextView)convertView.findViewById(R.id.tvName);
        tvName.setText(entry.getName());
 
        // set phone
        TextView tvPhone = (TextView)convertView.findViewById(R.id.tvPhone);
        tvPhone.setText(entry.getPhone());
 
        // set email
        TextView tvEmail = (TextView)convertView.findViewById(R.id.tvEmail);
        tvEmail.setText(entry.getEmail());
 
        return convertView;
    }
 
}

Main Activity
package pete.android.study;
 
import java.util.ArrayList;
import java.util.List;
 
import android.app.Activity;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.widget.ListView;
 
public class MainActivity extends Activity {
 
    private ListView lvPhone;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
 
        lvPhone = (ListView)findViewById(R.id.listPhone);
 
        List<PhoneBook> listPhoneBook = new ArrayList<PhoneBook>();

7
        listPhoneBook.add(new PhoneBook(
                BitmapFactory.decodeResource(getResources(), R.drawable.avatar_pete),
                "Pete Houston", "010-9817-6331", "pete.houston.17187@gmail.com"));
        listPhoneBook.add(new PhoneBook(
                BitmapFactory.decodeResource(getResources(), R.drawable.avatar_lina),
                "Lina Cheng", "046-7764-1142", "lina.cheng011@sunny.com"));
        listPhoneBook.add(new PhoneBook(
                BitmapFactory.decodeResource(getResources(), R.drawable.avatar_jenny),
                "Jenny Nguyen", "0913-223-498", "jenny_in_love98@yahoo.com"));
        PhoneBookAdapter adapter = new PhoneBookAdapter(this, listPhoneBook);
        lvPhone.setAdapter(adapter);
    }
}

OUTPUT:

8
Experiment 3
AIM: Develop a Digital Clock for Andriod Platform using any mobile phone
interface.
SOURCE CODE:
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<AnalogClock

android:layout_marginTop="20dp"
android:layout_marginLeft="120dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<DigitalClock

android:layout_marginLeft="140dp"
android:textSize="25dp"
android:layout_marginTop="300dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</RelativeLayout>

MainActivity.java

package org.geeksforgeeks.navedmalik.analogdigital;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

9
}

OUTPUT:

10
Experiment 4
AIM: Develop a unit converter for mobile device using any mobile interface.
SOURCE CODE:

import android.content.Context;
import android.content.SharedPreference;
import android.os.Bundle;
import android.preference.PreferenceManager;
import com.google.android.material.navigation.NavigationView;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
import android.view.MenuItem;
import android.view.View;
import android.view.inputmethod.InputMethodManager;

import com.physphil.android.unitconverterultimate.fragments.ConversionFragment;
import com.physphil.android.unitconverterultimate.fragments.HelpDialogFragment;
import com.physphil.android.unitconverterultimate.models.Conversion;
import com.physphil.android.unitconverterultimate.presenters.MainActivityPresenter;
import com.physphil.android.unitconverterultimate.presenters.MainActivityView;
import com.physphil.android.unitconverterultimate.util.Conversions;
import com.physphil.android.unitconverterultimate.util.IntentFactory;

public class MainActivity extends BaseActivity implements MainActivityView,


SharedPreferences.OnSharedPreferenceChangeListener {

private DrawerLayout mDrawerLayout;


private Conversions mConversions;
private MainActivityPresenter mPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO - replace with Dagger2 injection
mPresenter = new MainActivityPresenter(this, this, Preferences.getInstance(this));

PreferenceManager.setDefaultValues(this, R.xml.preferences, true);

Preferences.getInstance(this).getPreferences().registerOnSharedPreferenceChangeListener(th
is);
mConversions = Conversions.getInstance();

// setup language
mPresenter.setLanguageToDisplay();

setContentView(R.layout.activity_main);

11
setupToolbar();
setToolbarHomeNavigation(true);
if (getSupportActionBar() != null)
getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_white_24dp);

int conversion = Preferences.getInstance(this).getLastConversion();


setToolbarTitle(mConversions.getById(conversion).getLabelResource());
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
mDrawerLayout.setDrawerListener(new DrawerLayout.DrawerListener() {
@Override
public void onDrawerSlide(View drawerView, float slideOffset) {}

@Override
public void onDrawerOpened(View drawerView) {
hideKeyboard();
}

@Override
public void onDrawerClosed(View drawerView) {}

@Override
public void onDrawerStateChanged(int newState) {}
});
setupDrawer(getMenuPositionOfConversion(conversion));

if (savedInstanceState == null) {
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container,
ConversionFragment.newInstance(conversion))
.commit();
}
}

@Override
protected void onStart() {
super.onStart();

// Show help dialog if never seen before


if (Preferences.getInstance(this).showHelp()) {
HelpDialogFragment.newInstance().show(getSupportFragmentManager(),
HelpDialogFragment.TAG);
}
}

@Override
protected void onDestroy() {
super.onDestroy();

Preferences.getInstance(this).getPreferences().unregisterOnSharedPreferenceChangeListener(
this);

12
}

private void setupDrawer(int state) {


NavigationView navigationView = (NavigationView)
findViewById(R.id.navigation_drawer);
navigationView.getMenu().getItem(state).setChecked(true);

navigationView.setItemBackgroundResource(Preferences.getInstance(this).isLightTheme() ?
R.drawable.navigation_item_background_light :
R.drawable.navigation_item_background);
navigationView.setNavigationItemSelectedListener(new
NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
mDrawerLayout.closeDrawers();
switch (menuItem.getItemId()) {
case R.id.drawer_settings:
PreferencesActivity.start(MainActivity.this);
return true;

default:
menuItem.setChecked(true);
int conversion = getConversionFromDrawer(menuItem.getItemId());
setToolbarTitle(mConversions.getById(conversion).getLabelResource());
getSupportFragmentManager().beginTransaction()
.replace(R.id.fragment_container,
ConversionFragment.newInstance(conversion))
.commit();
return true;
}
}
});
}

@Conversion.id
private int getConversionFromDrawer(int itemId) {
switch (itemId) {
case R.id.drawer_area:
return Conversion.AREA;

case R.id.drawer_cooking:
return Conversion.COOKING;

case R.id.drawer_currency:
return Conversion.CURRENCY;

case R.id.drawer_storage:
return Conversion.STORAGE;

case R.id.drawer_energy:

13
return Conversion.ENERGY;

case R.id.drawer_fuel:
return Conversion.FUEL;

case R.id.drawer_length:
return Conversion.LENGTH;

case R.id.drawer_mass:
return Conversion.MASS;

case R.id.drawer_power:
return Conversion.POWER;

case R.id.drawer_pressure:
return Conversion.PRESSURE;

case R.id.drawer_speed:
return Conversion.SPEED;

case R.id.drawer_temperature:
return Conversion.TEMPERATURE;

case R.id.drawer_time:
return Conversion.TIME;

case R.id.drawer_torque:
return Conversion.TORQUE;

case R.id.drawer_volume:
return Conversion.VOLUME;
}

return Conversion.AREA;
}

private int getMenuPositionOfConversion(@Conversion.id final int conversion) {


switch (conversion) {
case Conversion.AREA:
return 0;
case Conversion.COOKING:
return 1;
case Conversion.CURRENCY:
return 2;
case Conversion.STORAGE:
return 3;
case Conversion.ENERGY:
return 4;
case Conversion.FUEL:
return 5;

14
case Conversion.LENGTH:
return 6;
case Conversion.MASS:
return 7;
case Conversion.POWER:
return 8;
case Conversion.PRESSURE:
return 9;
case Conversion.SPEED:
return 10;
case Conversion.TEMPERATURE:
return 11;
case Conversion.TIME:
return 12;
case Conversion.TORQUE:
return 13;
case Conversion.VOLUME:
return 14;
default:
return 0;
}
}

private void hideKeyboard() {


View v = getCurrentFocus();
if (v != null) {
InputMethodManager imm = (InputMethodManager)
getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
}

@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String
key) {
if (key.equals(Preferences.PREFS_THEME)) {
recreate();
}
else if (key.equals(Preferences.PREFS_LANGUAGE)) {
mPresenter.onLanguageChanged();
}
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
mDrawerLayout.openDrawer(GravityCompat.START);
return true;

15
default:
return super.onOptionsItemSelected(item);
}
}

@Override
public void restartApp() {
startActivity(IntentFactory.getRestartAppIntent(this));
}
// endregion
}

OUTPUT:

16
Experiment 5
AIM :Develop a text editor for mobile device using any mobile interface.

SOURCE CODE

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import io.github.mthli.knife.KnifeText;

public class MainActivity extends Activity {


private static final String BOLD = "<b>Bold</b><br><br>";
private static final String ITALIT = "<i>Italic</i><br><br>";
private static final String UNDERLINE = "<u>Underline</u><br><br>";
private static final String STRIKETHROUGH = "<s>Strikethrough</s><br><br>";
// <s> or <strike> or <del>
private static final String BULLET = "<ul><li>asdfg</li></ul>";
private static final String QUOTE = "<blockquote>Quote</blockquote>";
private static final String LINK = "<a
href=\"https://github.com/mthli/Knife\">Link</a><br><br>";
private static final String EXAMPLE = BOLD + ITALIT + UNDERLINE +
STRIKETHROUGH + BULLET + QUOTE + LINK;

private KnifeText knife;

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

knife = (KnifeText) findViewById(R.id.knife);


// ImageGetter coming soon...
knife.fromHtml(EXAMPLE);
knife.setSelection(knife.getEditableText().length());

setupBold();

17
setupItalic();
setupUnderline();
setupStrikethrough();
setupBullet();
setupQuote();
setupLink();
setupClear();
}

private void setupBold() {


ImageButton bold = (ImageButton) findViewById(R.id.bold);

bold.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.bold(!knife.contains(KnifeText.FORMAT_BOLD));
}
});

bold.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_bold,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupItalic() {


ImageButton italic = (ImageButton) findViewById(R.id.italic);

italic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.italic(!knife.contains(KnifeText.FORMAT_ITALIC));
}
});

italic.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_italic,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupUnderline() {

18
ImageButton underline = (ImageButton) findViewById(R.id.underline);

underline.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.underline(!knife.contains(KnifeText.FORMAT_UNDERLINED));
}
});

underline.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_underline,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupStrikethrough() {


ImageButton strikethrough = (ImageButton) findViewById(R.id.strikethrough);

strikethrough.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

knife.strikethrough(!knife.contains(KnifeText.FORMAT_STRIKETHROUGH));
}
});

strikethrough.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_strikethrough,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupBullet() {


ImageButton bullet = (ImageButton) findViewById(R.id.bullet);

bullet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.bullet(!knife.contains(KnifeText.FORMAT_BULLET));
}
});

19
bullet.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_bullet,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupQuote() {


ImageButton quote = (ImageButton) findViewById(R.id.quote);

quote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.quote(!knife.contains(KnifeText.FORMAT_QUOTE));
}
});

quote.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_quote,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupLink() {


ImageButton link = (ImageButton) findViewById(R.id.link);

link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showLinkDialog();
}
});

link.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_insert_link,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

20
private void setupClear() {
ImageButton clear = (ImageButton) findViewById(R.id.clear);

clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.clearFormats();
}
});

clear.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_format_clear,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void showLinkDialog() {


final int start = knife.getSelectionStart();
final int end = knife.getSelectionEnd();

AlertDialog.Builder builder = new AlertDialog.Builder(this);


builder.setCancelable(false);

View view = getLayoutInflater().inflate(R.layout.dialog_link, null, false);


final EditText editText = (EditText) view.findViewById(R.id.edit);
builder.setView(view);
builder.setTitle(R.string.dialog_title);

builder.setPositiveButton(R.string.dialog_button_ok, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String link = editText.getText().toString().trim();
if (TextUtils.isEmpty(link)) {
return;
}

// When KnifeText lose focus, use this method


knife.link(link, start, end);
}
});

builder.setNegativeButton(R.string.dialog_button_cancel, new
DialogInterface.OnClickListener() {
@Override

21
public void onClick(DialogInterface dialog, int which) {
// DO NOTHING HERE
}
});

builder.create().show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.undo:
knife.undo();
break;
case R.id.redo:
knife.redo();
break;
case R.id.github:
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(getResources().getString(R.string.app_repo)));
startActivity(intent);
break;
default:
break;
}

return true;
}
}

22
OUTPUT:

23
Experiment 6
AIM: Develop a tic-tac-toe game for mobile device using any mobile interface.
SOURCE CODE:

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.Toast;

import io.github.mthli.knife.KnifeText;

public class MainActivity extends Activity {


private static final String BOLD = "<b>Bold</b><br><br>";
private static final String ITALIT = "<i>Italic</i><br><br>";
private static final String UNDERLINE = "<u>Underline</u><br><br>";
private static final String STRIKETHROUGH = "<s>Strikethrough</s><br><br>";
// <s> or <strike> or <del>
private static final String BULLET = "<ul><li>asdfg</li></ul>";
private static final String QUOTE = "<blockquote>Quote</blockquote>";
private static final String LINK = "<a
href=\"https://github.com/mthli/Knife\">Link</a><br><br>";
private static final String EXAMPLE = BOLD + ITALIT + UNDERLINE +
STRIKETHROUGH + BULLET + QUOTE + LINK;

private KnifeText knife;

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

knife = (KnifeText) findViewById(R.id.knife);


// ImageGetter coming soon...
knife.fromHtml(EXAMPLE);
knife.setSelection(knife.getEditableText().length());

setupBold();
setupItalic();
setupUnderline();

24
setupStrikethrough();
setupBullet();
setupQuote();
setupLink();
setupClear();
}

private void setupBold() {


ImageButton bold = (ImageButton) findViewById(R.id.bold);

bold.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.bold(!knife.contains(KnifeText.FORMAT_BOLD));
}
});

bold.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_bold,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupItalic() {


ImageButton italic = (ImageButton) findViewById(R.id.italic);

italic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.italic(!knife.contains(KnifeText.FORMAT_ITALIC));
}
});

italic.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_italic,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupUnderline() {


ImageButton underline = (ImageButton) findViewById(R.id.underline);

25
underline.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.underline(!knife.contains(KnifeText.FORMAT_UNDERLINED));
}
});

underline.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_underline,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupStrikethrough() {


ImageButton strikethrough = (ImageButton) findViewById(R.id.strikethrough);

strikethrough.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

knife.strikethrough(!knife.contains(KnifeText.FORMAT_STRIKETHROUGH));
}
});

strikethrough.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_strikethrough,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupBullet() {


ImageButton bullet = (ImageButton) findViewById(R.id.bullet);

bullet.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.bullet(!knife.contains(KnifeText.FORMAT_BULLET));
}
});

bullet.setOnLongClickListener(new View.OnLongClickListener() {

26
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_bullet,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupQuote() {


ImageButton quote = (ImageButton) findViewById(R.id.quote);

quote.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.quote(!knife.contains(KnifeText.FORMAT_QUOTE));
}
});

quote.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_quote,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupLink() {


ImageButton link = (ImageButton) findViewById(R.id.link);

link.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showLinkDialog();
}
});

link.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_insert_link,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void setupClear() {

27
ImageButton clear = (ImageButton) findViewById(R.id.clear);

clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
knife.clearFormats();
}
});

clear.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
Toast.makeText(MainActivity.this, R.string.toast_format_clear,
Toast.LENGTH_SHORT).show();
return true;
}
});
}

private void showLinkDialog() {


final int start = knife.getSelectionStart();
final int end = knife.getSelectionEnd();

AlertDialog.Builder builder = new AlertDialog.Builder(this);


builder.setCancelable(false);

View view = getLayoutInflater().inflate(R.layout.dialog_link, null, false);


final EditText editText = (EditText) view.findViewById(R.id.edit);
builder.setView(view);
builder.setTitle(R.string.dialog_title);

builder.setPositiveButton(R.string.dialog_button_ok, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String link = editText.getText().toString().trim();
if (TextUtils.isEmpty(link)) {
return;
}

// When KnifeText lose focus, use this method


knife.link(link, start, end);
}
});

builder.setNegativeButton(R.string.dialog_button_cancel, new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// DO NOTHING HERE

28
}
});

builder.create().show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.undo:
knife.undo();
break;
case R.id.redo:
knife.redo();
break;
case R.id.github:
Intent intent = new Intent(Intent.ACTION_VIEW,
Uri.parse(getResources().getString(R.string.app_repo)));
startActivity(intent);
break;
default:
break;
}

return true;
}
}

Board.java

import java.util.ArrayList;
import java.util.List;

public class Board {

private static int GAME_RESULT_WIN=1;


private static int GAME_RESULT_FAIL=2;
private static int GAME_RESULT_DRAW=0;

29
int[][] gameBoardArr=new int[3][3];

private int playCounter=1;

public boolean gameOver = false;

public Board copy(){

Board copy=new Board();

if (this.gameOver){
copy.gameOver=true;
}else {
copy.gameOver=false;
}

copy.playCounter=Integer.valueOf(this.playCounter);

for (int i=0;i<3;i++){


for (int j=0;j<3;j++){
copy.gameBoardArr[i][j]=this.gameBoardArr[i][j];
}
}

return copy;
}

public void placePiece(int position){

if (!gameOver){
//Log.d("Board","placePiece vaild");
int score=0;
switch (getCurrentPlayer()){
case 1:score=1;break;
case 2:score=5;break;
}

switch (position){
case 1: gameBoardArr[0][0]=score; break;
case 2: gameBoardArr[0][1]=score; break;
case 3: gameBoardArr[0][2]=score; break;
case 4: gameBoardArr[1][0]=score; break;
case 5: gameBoardArr[1][1]=score; break;
case 6: gameBoardArr[1][2]=score; break;
case 7: gameBoardArr[2][0]=score; break;
case 8: gameBoardArr[2][1]=score; break;
case 9: gameBoardArr[2][2]=score; break;
default: break;
}

30
playCounter++;

if (getGameResult()!=4){
gameOver=true;
// Log.d("Board","Game Over +Player"+getCurrentPlayer()+"Wins");
}

public int getCurrentPlayer() {


int currentPlayer;
if (this.playCounter%2==0)
currentPlayer=2;
else
currentPlayer=1;
return currentPlayer;
}

public int getGameResult(){

int gameResult=4;

boolean hasZero=false;
int rowSum=0;
int columnSum=0;
int diagonalSum=0;
int anotherDiagonalSum=0;

//Test Row
for (int i=0;i<3;i++){
rowSum=gameBoardArr[i][0]+gameBoardArr[i][1]+gameBoardArr[i][2];
if (rowSum==15){
return GAME_RESULT_FAIL;
}else if (rowSum==3){
return GAME_RESULT_WIN;
}
}

//Test Column
for (int i=0;i<3;i++){
columnSum=gameBoardArr[0][i]+gameBoardArr[1][i]+gameBoardArr[2][i];
if (columnSum==15){
return GAME_RESULT_FAIL;
}else if (columnSum==3){
return GAME_RESULT_WIN;
}
}

31
//test diagonalSum
diagonalSum=gameBoardArr[0][0]+gameBoardArr[1][1]+gameBoardArr[2][2];

anotherDiagonalSum=gameBoardArr[2][0]+gameBoardArr[1][1]+gameBoardArr[0][2];

if (diagonalSum==3||anotherDiagonalSum==3){
return GAME_RESULT_WIN;
}else if (diagonalSum==15||anotherDiagonalSum==15){
return GAME_RESULT_FAIL;
}

//check for draw


for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
if (gameBoardArr[i][j]==0){
hasZero=true;
}
}
}

if (!hasZero){
return GAME_RESULT_DRAW;
}

return gameResult;
}

public List getAvailableSlots(){

List<Integer> list =new ArrayList<>();

int flag=1;
for (int i=0;i<3;i++){
for (int j=0;j<3;j++){
if (gameBoardArr[i][j]==0){
list.add(flag);
}
flag++;
}
}

//Log.d("Board","AvaliableSolts: "+list.toString());

return list;}}

32
OUTPUT:

33
Experiment 7
AIM: Implement mobile ad-hoc network using NS2.
IMPLEMENTATION:
void Protoname::send_protoname_pkt() {
Packet* p = allocpkt();
struct hdr_cmn* ch = HDR_CMN(p);
struct hdr_ip* ih = HDR_IP(p);
struct hdr_protoname_pkt* ph = HDR_PROTONAME_PKT(p);
ph-&amp;amp;amp;gt;pkt_src() = ra_addr();
ph-&amp;amp;amp;gt;pkt_len() = 7;
ph-&amp;amp;amp;gt;pkt_seq_num() = seq_num_++;
ch-&amp;amp;amp;gt;ptype() = PT_PROTONAME;
ch-&amp;amp;amp;gt;direction() = hdr_cmn::DOWN;
ch-&amp;amp;amp;gt;size() = IP_HDR_LEN +
ph-&amp;amp;amp;gt;pkt_len();
ch-&amp;amp;amp;gt;error() = 0;
ch-&amp;amp;amp;gt;next_hop() = IP_BROADCAST;
ch-&amp;amp;amp;gt;addr_type() = NS_AF_INET;
ih-&amp;amp;amp;gt;saddr() = ra_addr();
ih-&amp;amp;amp;gt;daddr() = IP_BROADCAST;
ih-&amp;amp;amp;gt;sport() = RT_PORT;
ih-&amp;amp;amp;gt;dport() = RT_PORT;
ih-&amp;amp;amp;gt;ttl() = IP_DEF_TTL;
Scheduler::instance().schedule(target_, p, JITTER);
}void
Protoname::reset_protoname_pkt_timer() {
pkt_timer_.resched((double)5.0); }

34
Experiment 8
AIM:Implement AODV routing protocol using NS2/NS2.
IMPLEMENTATION:
int hdr_aodv::offset_;
static class aodvHeaderClass : public PacketHeaderClass {
public: aodvHeaderClass() : PacketHeaderClass("PacketHeader/aodv",
                                                        sizeof(hdr_all_aodv)) {
        bind_offset(&hdr_aodv::offset_);
   }
} class_rtProtoaodv_hdr;
 
static class aodvclass : public TclClass {
public:
    aodvclass() : TclClass("Agent/aodv") {}
    TclObject* create(int argc, const char*const* argv) {
        assert(argc == 5);
        return (new aodv((nsaddr_t) Address::instance().str2addr(argv[4])));
    }
} class_rtProtoaodv;
 
 
int
aodv::command(int argc, const char*const* argv) {
    if(argc == 2) {
        Tcl& tcl = Tcl::instance();
         
        if(strncasecmp(argv[1], "id", 2) == 0) {
            tcl.resultf("%d", index);
            return TCL_OK;
        }
        if (strncasecmp(argv[1], "dump-table", 10) == 0) {
            printf("Node %d: Route table:\n", index);
            rtable.rt_dumptable();
            return TCL_OK;
        }   
        if(strncasecmp(argv[1], "start", 2) == 0) {
            btimer.handle((Event*) 0);
             

35
#ifndef aodv_LINK_LAYER_DETECTION
            htimer.handle((Event*) 0);
            ntimer.handle((Event*) 0);
#endif     
            rtimer.handle((Event*) 0);
            return TCL_OK;
        }

36

You might also like